Skip to content

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!


When I first started exploring the world of web development, I was immediately drawn to JavaScript. I was inspired by the countless possibilities it offered in terms of building dynamic and interactive websites. The ability to add functionality to a web page and bring it to life was truly fascinating to me.

As I delved deeper into the language, I found myself constantly inspired by the innovative solutions that other developers had created using JavaScript. I became motivated to push myself to learn more, to experiment with new techniques and tools, and to see what I could create with this powerful language.

In short, my motivation to learn JavaScript came from my desire to be part of a community of innovative and creative thinkers who were constantly pushing the boundaries of what was possible in web development. I wanted to be a part of that world, and I knew that learning JavaScript was the first step on that journey.


Currently, I am working on building a simple website using JavaScript. I was inspired to take on this project after realizing the importance of having a strong online presence for businesses and individuals alike. JavaScript is a crucial language for web development, and I wanted to dive deeper into its capabilities by creating a website of my own.

As I started working on the project, I found myself enjoying the process of coding and problem-solving. Each step of the way, I learned something new about JavaScript and its features. I experimented with different functions and event handlers, and it was exciting to see how the website's functionality changed with each addition.

Working on this project has also allowed me to apply my creativity and design skills. I've been able to explore different ways of presenting information and making the website user-friendly. It's been a rewarding experience to see my ideas come to life on the screen.

Overall, this project has been a great learning experience for me. It has solidified my interest in web development and given me the confidence to take on more complex projects in the future.


To complete my project of building a simple website using JavaScript, I followed a few steps. Firstly, I planned the layout of the website and created wireframes to visualize how each page would look like. Then, I wrote the HTML and CSS code to create the basic structure and styling of the website.

Next, I started working on the JavaScript functionality. I added interactive features like a navigation menu, a contact form, and a slider for images. I also included some animations and effects to make the website more engaging.

However, I faced some challenges along the way. One of the main challenges was getting the navigation menu to work properly. Initially, it did not respond to clicks and did not show the correct pages. I had to research and learn more about JavaScript event listeners and DOM manipulation to fix this issue.

Another challenge was getting the contact form to send emails. I had to learn how to use a server-side programming language like PHP to handle the form submission and send an email with the form data.

To overcome these challenges, I spent time researching and learning more about JavaScript, HTML, and CSS. I also reached out to online communities and forums for help and advice.

Overall, the project was a great learning experience, and I am proud of what I was able to accomplish using JavaScript. I gained a deeper understanding of web development and learned new skills that I can apply to future projects.


Reflecting on what I learned from building a simple website using JavaScript, I realized that it is a powerful language that can create dynamic and interactive web pages. Through this project, I learned about various JavaScript functions, including DOM manipulation, event listeners, and object-oriented programming.

One thing I would do differently next time is to plan my project more thoroughly. I faced a few challenges along the way because I didn't have a clear plan before starting. Next time, I would create a detailed plan, including the layout, functionality, and features of the website before starting the coding process.

Overall, building this website has helped me improve my skills and understanding of JavaScript. I am now more confident in my ability to use JavaScript to create interactive and dynamic web pages, and I am excited to continue learning and exploring the possibilities of this language.


In my journey of learning JavaScript and building a website, I found several resources that were helpful in improving my skills. Here are a few that I would like to share:

  1. The Wemakedevs roadmap provides a valuable front-end learning path with numerous excellent resources to learn JavaScript. I highly recommend checking it out.

    WeMakeDevs roadmap for Frontend-Development

  2. Mozilla Developer Network: This website offers a wealth of information on JavaScript and web development. I found their documentation to be comprehensive and easy to understand, and I frequently referred to it while working on my project.

  3. FreeCodeCamp is a great resource for learning JavaScript, offering a wide range of informative videos. Additionally, CodeWithHarry and Akshay Saini have done an excellent job of providing valuable JavaScript knowledge through their YouTube channels

  4. Stack Overflow: This is a popular online community where developers can ask and answer questions related to programming. I found it to be a helpful resource when I encountered coding challenges and needed guidance.

Overall, these resources helped me to develop a strong foundation in JavaScript and improve my skills as a web developer.


As I embarked on my journey to learn JavaScript, I never imagined the exciting adventures that awaited me. It all started when I stumbled upon a simple webpage and wondered how it was made. Intrigued, I began researching and discovered that the page was built using JavaScript, a programming language that I had heard of but knew very little about.

With newfound curiosity, I dove headfirst into learning JavaScript. At first, it was a bit overwhelming. I struggled to understand the syntax and structure of the language. But I was determined to master it, and with each passing day, my confidence grew.

One of the most exciting experiences during my journey was when I built my very first website using JavaScript. It wasn't anything fancy, just a simple webpage with a few interactive features, but it was a proud moment for me nonetheless. I spent countless hours pouring over code, debugging errors, and testing different functionalities. It wasn't always easy, but the feeling of accomplishment when I finally got it right was worth every second.

Throughout my learning journey, I found myself constantly seeking out resources to help me improve my skills. Online tutorials, books, and courses were all instrumental in my success. Some of my favorite resources included FreeCodeCamp's JavaScript videos, CodeWithHarry, and Akshay Saini's YouTube channels. Each provided a unique perspective on the language and helped me better understand its intricacies.

Looking back on my journey, I can confidently say that learning JavaScript has been one of the most rewarding experiences of my life. It has helped me develop new skills, boosted my confidence, and opened doors to exciting opportunities. While there were certainly challenges along the way, I am grateful for each and every one of them. They helped me grow and pushed me to become a better developer.

In the future, I plan to continue honing my JavaScript skills and taking on new challenges. There is always more to learn, and I am excited to see where this journey will take me next.

Introduction to the topics of DevOps, MLOps, GitOps, and Open Source, was discussed at wemakedevs delhi meetup:

DevOps: DevOps is a set of practices that combine software development (Dev) and IT operations (Ops) to enable faster and more reliable software delivery. DevOps emphasizes collaboration, automation, and continuous improvement, and is widely used in modern software development.

MLOps: MLOps, or machine learning operations, is the application of DevOps practices to machine learning workflows. MLOps enables teams to manage and scale machine learning models in a more automated and efficient way, using tools such as containerization, version control, and continuous integration/continuous deployment (CI/CD) pipelines.

GitOps: GitOps is a way of managing infrastructure and application deployments using Git version control. In a GitOps workflow, all changes to infrastructure and application configurations are made through Git commits, which trigger automated deployment pipelines. GitOps enables teams to manage infrastructure and applications in a more scalable, automated, and secure way.

Open Source: Open source software is software that is freely available for use, modification, and distribution by anyone. Open source software is developed and maintained by a community of developers and users, who collaborate to improve the software and ensure its quality and security.

These topics are all highly relevant and important for modern software development and are increasingly being adopted by organizations of all sizes and industries. By staying up-to-date on the latest developments in DevOps, MLOps, GitOps, and Open Source, software developers and organizations can ensure that they are delivering high-quality software that meets the needs of their users and customers


I was drawn to the tech meetup due to my keen interest in topics such as DevOps, MLOps, GitOps, and Open Source. As someone who is always seeking to enhance my skills and knowledge in software development, I was excited to learn from industry experts and my peers in the field. Additionally, I was eager to connect with other developers, engineers, and industry professionals to exchange ideas, share experiences, and build relationships. Being a part of a larger network of like-minded individuals who share my interests and goals was also a key motivation for attending the wemakedevs meetup. Overall, I was hoping to gain insights, best practices, and inspiration that I could apply in my work and personal projects.


The keynote presentation on DevOps by Subhasmita Swain was undoubtedly the highlight of my experience at the wemakedevs tech meetup. Her insights and best practices were highly informative and thought-provoking, and her engaging and entertaining approach made the session more enjoyable. The breakout sessions on MLOps and GitOps were equally impressive, allowing me to learn from other developers and exchange ideas with peers. I was particularly struck by a conversation I had with another attendee about the future of Open Source, which left a lasting impression on me. His perspectives were insightful and inspiring, and I found it fascinating to learn about his experiences working on open source projects. Overall, attending the wemakedevs tech meetup was a unique and valuable opportunity to learn, connect, and grow in the tech industry. I am already looking forward to attending the next one.


After attending Apoorv Goyal insightful and informative session on containerization, I gained a deeper understanding of the technology and its various use cases. Mr. Goyal shared his expertise on the subject matter and provided us with valuable insights and best practices on how to leverage containerization effectively. His presentation was well-structured and easy to follow, and he did an excellent job of breaking down complex concepts into simple, understandable terms.

During the session, I learned about the benefits of containerization, such as increased efficiency, scalability, and portability, and how it is transforming the way modern software is developed and deployed. Mr. Goyal also discussed the various containerization tools and platforms available in the market, and provided practical tips on how to choose the right tool for a particular use case.

Overall, the session was a great learning experience for me, and I left with a newfound appreciation for the power of containerization. Mr. Goyal's expertise and engaging teaching style made the session both informative and enjoyable, and I'm excited to apply the knowledge and best practices I learned to my work in the future.


When reflecting on my experience attending the wemakedevs tech meetup, I can confidently say that it exceeded my expectations. I learned so much from the keynote presentation on DevOps by Subhasmita Swain and the breakout sessions on MLOps and GitOps. The conversations I had with other attendees were also incredibly insightful and thought-provoking.

I gained a deeper understanding of containerization from Apoorv Goyal's session, which taught me some of the best practices of containerization. I also enjoyed learning about some of the latest trends in open source development and how developers are using new technologies to solve complex problems.

Overall, attending the wemakedevs tech meetup was a valuable experience that provided me with unique insights and perspectives. I would highly recommend it to other developers and industry professionals who are looking to expand their knowledge and connect with like-minded individuals.

The most memorable moment for me during the meetup was the networking session during lunchtime, where I had the chance to interact with other attendees. It was a valuable opportunity to exchange ideas, share experiences, and establish connections. Additionally, the event provided a platform for me to actively engage with the tech community and expand my network with like-minded individuals who share my passion and aspirations.

In conclusion, attending the wemakedevs tech meetup was a rewarding experience that exceeded my expectations. I left with a deeper understanding of the latest trends in software development and valuable insights from industry experts and peers. I would highly recommend it to anyone looking to enhance their skills and knowledge in the tech industry.

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!