FLOSS Project Planets

Dirk Eddelbuettel: x13binary 1.1.61 on CRAN: Maintenance

Planet Debian - Mon, 2024-06-24 09:51

The x13binary team is thrilled to share the availability of Release 1.1.61 of the x13binary package providing the X-13ARIMA-SEATS program by the US Census Bureau which arrived on CRAN earlier today.

This release brings two updates suggested by the tireless CRAN maintainers. Kurt Hornik suggested to now also ignore stderr when calling the x13 binary via system: it appears that builds under the new-ish and clang-based flang-new now emit on stderr even if Fortran-based binaries did not before. So we adjust. And Brian Ripley pointed out that our Makefile for creating the x13 binary was not quite as is should be, which we adjusted. And I just realized I should have named this 1.1.60-2 to follow the upstream convention but didn’t. Next time.

Courtesy of my CRANberries, there is also a diffstat report for this release showing changes to the previous release.

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

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

Categories: FLOSS Project Planets

Consensus Enterprises: Drupal 10 on Aegir 3: A Step-by-Step Guide

Planet Drupal - Mon, 2024-06-24 09:00
TL;DR: Zero to Drupal 10 on Aegir 3 in About Fifteen Minutes For those in a hurry: Start with a fresh Ubuntu 22 VM. Clone this git repository and follow the instructions in the README file. Use the Aegir 3 site migration process to move your Drupal sites to your new setup. Happy migrating! For more detailed information, keep reading. Background: Tectonic Drift At Consensus Enterprises, we’re dedicated to helping organizations transition smoothly from Drupal 7 to Drupal 10 on Aegir 3.
Categories: FLOSS Project Planets

Web Wash: New Navigation Sidebar (Experimental) in Drupal 10.3

Planet Drupal - Mon, 2024-06-24 08:35

Drupal 10.3 introduces a new experimental navigation module, offering a modern alternative to the traditional toolbar.

Key features of the new navigation bar:

  • Located on the left side of the screen.
  • Automatically expands menus on hover.
  • Allows users to drill down through configuration pages.
  • Replaces the top toolbar on the home page.

To try it out:

  1. Ensure Drupal 10.3 is installed.
  2. Go to “Extend” and search for “navigation”.
  3. Install the “Navigation” module (not “Navigation top bar”).

The new navigation bar provides a fresh, modern look for Drupal sites. However, as an experimental module, it may contain bugs or undergo changes in future updates.

Those interested in exploring this new feature can install the navigation module and experience the updated interface firsthand.

What new Drupal 10.3 feature are you looking forward to?

Categories: FLOSS Project Planets

LN Webworks: How To Create local Task Tabs Through A Custom Module

Planet Drupal - Mon, 2024-06-24 07:34

In Drupal, local tabs are an essential feature used to organize and display multiple configuration pages in a user-friendly manner.These tabs group related pages together, providing an intuitive and seamless navigation experience. 

By using local tabs, administrators and users can easily access different settings and configurations from a single interface without having to navigate through multiple pages. This functionality enhances the overall user experience, making it easier to manage and configure various aspects of a Drupal site efficiently. 

To create the Drupal Local tabs we can follow these steps:

Create A Module
  • First Create a module  For example “custom_module” 
  • After that define the custom_module.info.yml File in your custom module directory 

Structure:

custom_module/

 Custom_module.info.yml

  • In this file, you can define your module name,  version, and description 

  name: Custom Module
                    description: Custom Module
                     type: module
                     core_version_requirement: ^8 || ^9 || ^10

Categories: FLOSS Project Planets

Golems GABB: Drupal 11 Modules Overview

Planet Drupal - Mon, 2024-06-24 06:49
Drupal 11 Modules Overview Editor Mon, 06/24/2024 - 15:36

Have you been thinking about making a serious improvement to the performance of your Drupal site? It is supposed that Drupal 11 will be released sometime this year. So, the upcoming version of Drupal promises many big moves on many grounds, including improving several core aspects of the CMS. Here's a brief overview of what’s new in Drupal 11:

Categories: FLOSS Project Planets

Daniel Roy Greenfeld: London Tech Zero Hackathon on July 1 and 2!

Planet Python - Mon, 2024-06-24 06:37

On the 1st and 2nd of July is the first-ever London Tech Zero Hackathon, supported by Kraken Tech.

Taking place in the Vinyl Factory in Soho, for two days developers, designers, and others will hack out MVPs of solutions to resolve real-life sustainability and climate problems. APIs and guidance will be provided, and contestants can build out software or hardware solutions. Individuals are welcome to attend and companies are invited to send teams. There will be prizes besides bragging rights - including a £20k mini grant to develop the winning idea.

I'll be there to help! As an employee of the hosts, I can't build your projects for you but I can provide assistance. :-)

The event will provide:

  • APIs
  • Venue
  • Food and drink
  • Fast internet and power
  • Changes to network and socialize
  • Speech by Greg Jackson, CEO of Octopus Energy
  • Lots of prizes, first place is a £20K grant to help build out your project

Contests provide:

  • Skills
  • Enthusiasm
  • Laptop and other hardware

Schedule:

  • July 1: Event begins at 10am, venue closes at 10pm
  • July 2: Judging at 3pm

Space is limited, register your interest here.

Categories: FLOSS Project Planets

GNU Guile: GNU Guile 3.0.10 released

GNU Planet! - Mon, 2024-06-24 04:25

We are pleased to finally announce the release of GNU Guile 3.0.10! This release is mainly a bug-fix release, though it does include a number of new features:

For full details, see the release announcement, and check out the download page.

Happy Guile hacking!

Categories: FLOSS Project Planets

The Drop Times: Drupal Gutenberg v4.0 to Introduce Major UI Refactor and Enhanced Editing Features

Planet Drupal - Mon, 2024-06-24 04:10
Drupal Gutenberg v4.0, set for release in August 2024, will feature a major UI refactor specifically tailored for Drupal, moving away from WordPress components. It will introduce single-field editing and make the editor entity agnostic, allowing for editing various content types. The update will also integrate with the Drupal Starshot initiative, enhancing the overall Drupal editing experience.
Categories: FLOSS Project Planets

Python Bytes: #389 More OOP for Python?

Planet Python - Mon, 2024-06-24 04:00
<strong>Topics covered in this episode:</strong><br> <ul> <li><a href="https://solara.dev">Solara UI Framework</a></li> <li><a href="https://nedbatchelder.com/blog/202406/coverage_at_a_crossroads.html"><strong>Coverage at a crossroads</strong></a></li> <li><a href="https://fosstodon.org/@btskinn/109785696589422762">“Virtual” methods in Python classes</a></li> <li><strong>Extras</strong></li> <li><strong>Joke</strong></li> </ul><a href='https://www.youtube.com/watch?v=SodsVqwXOeA' style='font-weight: bold;'data-umami-event="Livestream-Past" data-umami-event-episode="389">Watch on YouTube</a><br> <p><strong>About the show</strong></p> <p>Sponsored by ScoutAPM: <a href="https://pythonbytes.fm/scout"><strong>pythonbytes.fm/scout</strong></a></p> <p><strong>Connect with the hosts</strong></p> <ul> <li>Michael: <a href="https://fosstodon.org/@mkennedy"><strong>@mkennedy@fosstodon.org</strong></a></li> <li>Brian: <a href="https://fosstodon.org/@brianokken"><strong>@brianokken@fosstodon.org</strong></a></li> <li>Show: <a href="https://fosstodon.org/@pythonbytes"><strong>@pythonbytes@fosstodon.org</strong></a></li> </ul> <p>Join us on YouTube at <a href="https://pythonbytes.fm/stream/live"><strong>pythonbytes.fm/live</strong></a> to be part of the audience. Usually Tuesdays at 10am PT. Older video versions available there too.</p> <p>Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to <a href="https://pythonbytes.fm/friends-of-the-show">our friends of the show list</a>, we'll never share it.</p> <p><strong>Michael #1:</strong> <a href="https://solara.dev">Solara UI Framework</a></p> <ul> <li>via Florian</li> <li>A Pure Python, React-style Framework for Scaling Your Jupyter and Web Apps</li> <li>Solara lets you build web apps from pure Python using ipywidgets or a React-like API on top of ipywidgets. </li> <li>These apps work both inside the Jupyter Notebook and as standalone web apps with frameworks like FastAPI.</li> <li>See the <a href="https://solara.dev/documentation/examples">Examples page</a>.</li> <li>Based on <a href="https://github.com/widgetti/reacton">Reacton</a></li> <li>By building on top of ipywidgets, Solara automatically leverage an existing ecosystem of widgets and run on many platforms, including JupyterLab, Jupyter Notebook, Voilà, Google Colab, DataBricks, JetBrains Datalore, and more.</li> </ul> <p><strong>Brian #2:</strong> <a href="https://nedbatchelder.com/blog/202406/coverage_at_a_crossroads.html"><strong>Coverage at a crossroads</strong></a></p> <ul> <li>Ned Batchelder is working on making coverage.py faster.</li> <li>Includes a nice, quick explanation of roughly how coverage.py works <ul> <li>with trace function and arcs used for branch coverage.</li> </ul></li> <li>And how trace slows things down for lines we know are already covered.</li> <li>There are cool ideas from <a href="https://github.com/plasma-umass/slipcover">SlipCover</a> that could be applicable.</li> <li>There’s also sys.monitoring from Python 3.12 that helps with line coverage, since you can disable it for lines you already have info on. <ul> <li>It doesn’t quite complete the picture for branch coverage, though. </li> </ul></li> <li>Summary: <ul> <li>jump in and help if you can</li> <li>read it anyway for a great mental model of how coverage.py works.</li> </ul></li> </ul> <p><strong>Michael #3:</strong> <a href="https://fosstodon.org/@btskinn/109785696589422762">“Virtual” methods in Python classes</a></p> <ul> <li>via Brian Skinn</li> <li><a href="https://peps.python.org/pep-0698/">PEP 698</a> just got accepted, defining an @override decorator for type hinting, to help avoid errors in subclasses that override methods.</li> <li>Only affects type checkers but allows you to declare a “link” between the base method and derived class method with the intent of overriding it using OOP. If there is a mismatch, it’s an error.</li> <li><a href="https://docs.python.org/3/library/typing.html#typing.override">Python 3.12’s documentation</a></li> <li>Makes Python <a href="https://stackoverflow.com/questions/622132/what-are-virtual-methods">a bit more like C#</a> and other more formal languages</li> </ul> <p><strong>Brian #4</strong>: <a href="https://www.gauge.sh/blog/parsing-python-asts-20x-faster-with-rust">Parsing Python ASTs 20x Faster with Rust</a></p> <ul> <li>Evan Doyle</li> <li><a href="https://github.com/gauge-sh/tach">Tach</a> is “a CLI tool that lets you define and enforce import boundaries between Python modules in your project.” <ul> <li>we covered it in <a href="https://pythonbytes.fm/episodes/show/384/force-push-lightly">episode 384</a></li> </ul></li> <li>When used to analyze Sentry’s ~3k Python file codebase, it took about 10 seconds. </li> <li>Profiling analysis using py-spy and speedscope pointed to a function that spends about 2/3 of the time parsing the AST, and about 1/3 traversing it.</li> <li>That portion was then rewritten in Rust, resulting in 10x speedup, ending in about 1 second.</li> <li>This is a cool example of not just throwing Rust at a speed problem right away, but doing the profiling homework first, and focusing the Rust rewrite on the bottleneck.</li> </ul> <p><strong>Extras</strong> </p> <p>Brian:</p> <ul> <li>I brought up pkgutil.resolve_name() last week on <a href="https://pythonbytes.fm/episodes/show/388/dont-delete-all-the-repos">episode 388</a> <ul> <li>Brett Cannon says <a href="https://fosstodon.org/@brettcannon/112663055336410268">don’t use that, it’s deprecated</a></li> <li>Thanks astroboy for letting me know</li> </ul></li> <li>Will we get CalVer for Python? <ul> <li><a href="https://pyfound.blogspot.com/2024/06/python-language-summit-2024-should-python-adopt-calver.html">it was talked about at the language summit</a></li> <li>There’s also <a href="https://peps.python.org/pep-2026/">pep 2026</a>, in draft, with a nice nod in the number of when it might happen. <ul> <li>3.13 already in the works for 2024</li> <li>3.14 slated for 2025, and we gotta have a pi release</li> <li>So the earliest is then 2026, with maybe a 3.26 version ?</li> </ul></li> </ul></li> <li><a href="https://snarky.ca/saying-thanks-to-open-source-maintainers/">Saying thanks to open source maintainers</a> <ul> <li>Great write-up by Brett Cannon about how to show your appreciation for OSS maintainers. <ul> <li>Be nice</li> <li>Be an advocate</li> <li>Produce your own open source</li> <li>Say thanks</li> <li>Fiscal support</li> </ul></li> <li>On topic <ul> <li>Thanks Brett for pyproject.toml. I love it.</li> </ul></li> </ul></li> </ul> <p>Michael:</p> <ul> <li>The <a href="https://training.talkpython.fm/courses/reactive-web-dashboards-with-shiny-for-data-science">Shiny for Python course</a> is out! Plus, it’s free so <a href="https://training.talkpython.fm/courses/reactive-web-dashboards-with-shiny-for-data-science">come and get it</a>.</li> </ul> <p><strong>Joke:</strong> <a href="https://www.talisman.org/tao/">Tao of Programming: Book 1: Into the Silent Void</a>, Part 1</p>
Categories: FLOSS Project Planets

Zato Blog: Getting started with network automation in Python

Planet Python - Mon, 2024-06-24 04:00
Getting started with network automation in Python 2024-06-24, by Dariusz Suchojad

All network engineers and architects understand that automation is essential for efficiency and reliability, especially with the increasing shift to cloud-based environments, where it's no longer sufficient to merely connect network elements alone, without taking the bigger IT picture into account.

The latest article about network automation will introduce you to a Python-based integration platform designed to automate network tasks, connect diverse systems, and manage complex workflows.

You'll see not only how to automate a network device, but also how to connect cloud applications outside of what a typical automation tool would do, including Jira for tickets and Microsoft 365 to manage email, all using basic Python code.

Read the article here: Network Automation in Python.

More resources

➤ Python API integration tutorial
What is a Network Packet Broker? How to automate networks in Python?
What is an integration platform?
Python Integration platform as a Service (iPaaS)
What is an Enterprise Service Bus (ESB)? What is SOA?

More blog posts
Categories: FLOSS Project Planets

Week 4 recap - Kisbrushop and drawDDAline

Planet KDE - Mon, 2024-06-24 02:24
Currently, my goal is to implement the pixel-perfect algorithm on just brushes that have sharpness checked and are no bigger than 1 pixel before moving on to other brush options. If we look at KisBrushOp::paintLine here: void KisBrushOp::paintLine(co...
Categories: FLOSS Project Planets

Morpht: Perfecting Search with Search API

Planet Drupal - Mon, 2024-06-24 00:39
Search is a core competency of most websites, however, so often it doesn’t perform the way users desire. It’s possible to get good results from Search API in Drupal with a rigorous approach and a bit of fine tuning.
Categories: FLOSS Project Planets

Dirk Eddelbuettel: digest 0.6.36 on CRAN: Big endian, maintenance

Planet Debian - Sun, 2024-06-23 21:42

Release 0.6.36 of the digest package arrived at CRAN today and has also been uploaded to Debian.

digest creates hash digests of arbitrary R objects. It can use a number different hashing algorithms (md5, sha-1, sha-256, sha-512, crc32, xxhash32, xxhash64, murmur32, spookyhash, blake3,crc32c, xxh3_64 and xxh3_128), and enables easy comparison of (potentially large and nested) R language objects as it relies on the native serialization in R. It is a mature and widely-used package (with 69.1 million downloads just on the partial cloud mirrors of CRAN which keep logs) as many tasks may involve caching of objects for which it provides convenient general-purpose hash key generation to quickly identify the various objects.

This release updates one contributed C++ function to be compliant with R’s revent preference for explicit declaration of REMAP, and improves the behavior under the (increasingly rare) ‘big endian’ system via a patch to blake3 as well as a hint that spookyhash under ‘big endian’ may not meed its reference output from ‘little endian’.

My CRANberries provides a summary of changes to the previous version. For questions or comments use the issue tracker off the GitHub repo. For documentation (including the changelog) see the documentation site.

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

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

Categories: FLOSS Project Planets

Vincent Bernat: Why content providers need IPv6

Planet Debian - Sun, 2024-06-23 17:30

IPv4 is an expensive resource. However, many content providers are still IPv4-only. The most common reason is that IPv4 is here to stay and IPv6 is an additional complexity.1 This mindset may seem selfish, but there are compelling reasons for a content provider to enable IPv6, even when they have enough IPv4 addresses available for their needs.

Disclaimer

It’s been a while since this article has been in my drafts. I started it when I was working at Shadow, a content provider, while I now work for Free, an internet service provider.

Why ISPs need IPv6?

Providing a public IPv4 address to each customer is quite costly when each IP address costs US$40 on the market. For fixed access, some consumer ISPs are still providing one IPv4 address per customer.2 Other ISPs provide, by default, an IPv4 address shared among several customers. For mobile access, most ISPs distribute a shared IPv4 address.

There are several methods to share an IPv4 address:3

NAT44
The customer device is given a private IPv4 address, which is translated to a public one by a service provider device. This device needs to maintain a state for each translation.
464XLAT and DS-Lite
The customer device translates the private IPv4 address to an IPv6 address or encapsulates IPv4 traffic in IPv6 packets. The provider device then translates the IPv6 address to a public IPv4 address. It still needs to maintain a state for the NAT64 translation.
Lightweight IPv4 over IPv6, MAP-E, and MAP-T
The customer device encapsulates IPv4 in IPv6 packets or performs a stateless NAT46 translation. The provider device uses a binding table or an algorithmic rule to map IPv6 tunnels to IPv4 addresses and ports. It does not need to maintain a state.
Solutions to share an IPv4 address across several customers. Some of them require the ISP to keep state, some don't.

All these solutions require a translation device in the ISP’s network. This device represents a non-negligible cost in terms of money and reliability. As half of the top 1000 websites support IPv6 and the biggest players can deliver most of their traffic using IPv6,4 ISPs have a clear path to reduce the cost of translation devices: provide IPv6 by default to their customers.

Why content providers need IPv6?

Content providers should expose their services over IPv6 primarily to avoid going through the ISP’s translation devices. This doesn’t help users who don’t have IPv6 or users with a non-shared IPv4 address, but it provides a better service for all the others.

Why would the service be better delivered over IPv6 than over IPv4 when a translation device is in the path? There are two main reasons for that:5

  1. Translation devices introduce additional latency due to their geographical placement inside the network: it is easier and cheaper to only install these devices at a few points in the network instead of putting them close to the users.

  2. Translation devices are an additional point of failure in the path between the user and the content. They can become overloaded or malfunction. Moreover, as they are not used for the five most visited websites, which serve their traffic over IPv6, the ISPs may not be incentivized to ensure they perform as well as the native IPv6 path.

Looking at Google statistics, half of the users reach Google over IPv6. Moreover, their latency is lower.6 In the US, all the nationwide mobile providers have IPv6 enabled.

For France, we can refer to the annual ARCEP report: in 2022, 72% of fixed users and 60% of mobile users had IPv6 enabled, with projections of 94% and 88% for 2025. Starting from this projection, since all mobile users go through a network translation device, content providers can deliver a better service for 88% of them by exposing their services over IPv6. If we exclude Orange, which has 40% of the market share on consumer fixed access, enabling IPv6 should positively impact more than 55% of fixed access users.

In conclusion, content providers aiming for the best user experience should expose their services over IPv6. By avoiding translation devices, they can ensure fast and reliable content delivery. This is crucial for latency-sensitive applications, like live streaming, but also for websites in competitive markets, where even slight delays can lead to user disengagement.

  1. A way to limit this complexity is to build IPv6 services and only provide IPv4 through reverse proxies at the edge. ↩︎

  2. In France, this includes non-profit ISPs, like FDN and Milkywan. Additionally, Orange, the previously state-owned telecom provider, supplies non-shared IPv4 addresses. Free also provides a dedicated IPv4 address for customers connected to the point-to-point FTTH access. ↩︎

  3. I use the term NAT instead of the more correct term NAPT. Feel free to do a mental substitution. If you are curious, check RFC 2663. For a survey of the IPv6 transition technologies enumerated here, have a look at RFC 9313↩︎

  4. For AS 12322, Google, Netflix, and Meta are delivering 85% of their traffic over IPv6. Also, more than half of our traffic is delivered over IPv6. ↩︎

  5. An additional reason is for fighting abuse: blacklisting an IPv4 address may impact unrelated users who share the same IPv4 as the culprits. ↩︎

  6. IPv6 may not be the sole reason the latency is lower: users with IPv6 generally have a better connection. ↩︎

Categories: FLOSS Project Planets

Better arguments make arguments better

Planet KDE - Sun, 2024-06-23 08:08
Cut through bullshit arguments fast and make project discussions more productive.
Categories: FLOSS Project Planets

Sahil Dhiman: How I Write Blogs - June 2024 Edition

Planet Debian - Sun, 2024-06-23 03:02

I wrote about my blog writing methodology back April 2021. My writing method has undergone a significant shift now, so thought about writing this update.

New blog topics are added to my note-taking app quite frequently now. Occasionally going through the list, I merge topics, change order to prioritize certain topics or purely drop ideas which seems not worth a write-up. Due to this, I have the liberty to work on blogs according to mood. Writing the last one was tiring, so I chose to work on an easy one, i.e. this blog now.

Topic decided, everything starts on etherpad now. Etherpad has this nice font and sync feature, which helps me write from any device of choice. Actual writing usually happens in the morning, right after I wake up. For most topics, I quickly jot down pointers and keep on expanding them over the course of multiple days at a leisurely pace. Though, sometime it adds too many pieces in the puzzle and takes additional time to put everything in flow. New pointer addition keeps on happening along with writing. Nowadays, pictures too dot my blog, which I rarely use to do earlier. I have come to believe on less usage of external links. These breaks the flow of readers. If someone is sufficiently motivated to learn more about something, finding useful sources isn’t.

As the first draft comes into being, I run it through LanguageTool for spelling corrections (which typically are many) and fixing grammatical issues. Post that, for the first time I read the complete write-up in one go for formation of coherent storyline, moving paragraphs around for form a structure , adding explainers wherever something new or unexplained is introduced, removing elaborate sentences, making amends wherever required and moving paragraphs around for forming structure. Another round of LanguageTool follows. All set now, I try to space out my final read before publishing, which helps find additional mistakes or loopholes.

When everything is set, I do hugo to generate the site and rsync everything to the web server. A final git sync closes the publication part.

After a day or two, I come back to read the blog on the website. This entails another round finding and fixing trivial mistakes. After this, it’s set for good.

Nowadays, in addition to being on my blog, everything is syndicated on Planet FSCI and Planet Debian, which has given it more visibility. As someone who’s into infrastructure and Internet as a lot, I do pay attention to logs on my server, but as a disconnected exercise to if the blog is being read or not. More hits on the blog doesn’t translate to any gratification for me, at least for writers’ point of view. Occasionally, people do mention my blog, which does flatter me. Four years and nearly a hundred posts later, I still wonder how I kept on writing for this long.

Categories: FLOSS Project Planets

Brett Cannon: My impressions of ReScript

Planet Python - Sat, 2024-06-22 19:35

I maintain a GitHub Action called check-for-changed-files. For the purpose of this blog post what the action does isn&apost important, but the fact that I authored it originally in TypeScript is. See, one day I tried to update the NPM dependencies. Unfortunately, that update broke everything in a really bad way due to how the libraries I used to access PR details changed and howthe TypeScript types changed. I had also gotten tired of updating the NPM dependencies for security concerns I didn&apost have since this code was only run in CI by others for their own use (i.e. regex denial-of-service isn&apost a big concern). As such I was getting close to burning out on the project as it was a nothing but a chore to keep it up-to-date and I wasn&apost motivated to keep the code up-to-date since TypeScript felt more like a cost than a benefit for such a small code base where I&aposm the sole maintainer (there&aposs only been one other contributor to the project since the initial commit 4.5 years ago). I converted the code base to JavaScript in hopes of simplifying my life and it went better than I expected, but it still wasn&apost enough to keep me interested in the project.

And so I did what I needed to in order to be engaged with the project again: I rewrote it in another programming language that could run easily under Node. &#x1F601; I decided I wanted to do the rewrite piecemeal to make sure I could tell if I was going to like the eventual outcome quickly rather than a complete rewrite from scratch and being unhappy with where I ended up (doing this while on parental leave made me prioritize my spare team immensely, so failing fast was tantamount). During my parental leave I learned Gleam because I loved their statement on expectations for community conduct on their homepage, but while it does compile to JavaScript I realized it works better when JavaScript is used as an escape hatch instead using Gleam to port an existing code base and so it wasn&apost a good fit for this use case.

My next language to attempt the rewrite with was ReScript thanks to my friend Dusty liking it. One of the first things I liked about the language was it had a clear migration path from JavaScript to ReScript in 5 easy steps. And since step 1 was "wrap your JavaScript code in %%raw blocks and change nothing" and step 5 was the optional "clean up" step, there was really only 3 main steps (I did have a hiccup with step 1, though, due to a bug not escaping backticks for template literals appropriately, but it was a mostly mechanical change to undo the template literals and switch to string concatenation).

A key thing that drew me to the language is its OCaml history. ReScript can have very strict typing, but ReScript&aposs OCaml background also means there&aposs type inference, so the typing doesn&apost feel that heavy. ReScript also has a functional programming leaning which I appreciate.

&#x1F4A1;When people say "ML" for "machine learning" it still throws me as I instinctively think they are actually referring to "Standard ML".

But having said all of that, ReScript does realize folks will be migrating or working with a preexisting JavaScript code base or libraries, and so it tries to be pragmatic for that situation. For instance, while the language has roots in OCaml, the syntax would feel comfortable to JavaScript developers. While supporting a functional style of programming, the language still has things like if/else and for loops. While the language is strongly typed, ReScript as things like its object type where the types of the fields can be inferred based on usage to make it easier to bring over JavaScript objects.

As part of the rewrite I decided to lean in on testing to help make sure things worked as I expected them to. But I ran into an issue where the first 3 testing frameworks I looked into didn&apost work with ReScript 11 (which came out in January 2024 and is the latest major version as I write this). Luckily the 4th one, rescript-zora, worked without issue (it also happens to be by my friend, Dusty, so I was able to ask questions of the author directly &#x1F601;; I initially avoided it so I wouldn&apost pester him about stuff, but I made up for it by contributing back). Since ReScript&aposs community isn&apost massive it isn&apost unexpected to have some delays in projects keeping up with stuff. Luckily the ReScript forum is active so you can get your questions answered quickly if you get stuck. But this hiccup and the one involving %%raw and template literals, the process was overall rather smooth.

In the end I would say the experience was a good one. I liked the language and transitioning from JavaScript to ReScript went relatively smoothly. As such, I have ported check-for-changed-files over to ReScript permanently in the 1.2.1 release, and hopefully no one noticed the switch. &#x1F91E;

Categories: FLOSS Project Planets

KDE PIM Sprint June 2024

Planet KDE - Sat, 2024-06-22 03:00

Last weekend I visited Toulouse for the annual KDE PIM sprint. Besides discussing many topics and getting a lot of work done this being in France also had some culinary benefits.

Photo by Carl Schwan. Sprint

There’s several reports already on Planet KDE about what we did:

And there’s also the meeting notes in the wiki.

So instead of repeating that I’ll just focus on a few things I worked on. What I’ll repeat though is their thanks to Étincelle Coworking for providing the venue and to Kévin for organizing everything.

Getting everyone together for a few days is extremely valuable and productive, and your donations to KDE .e.V. help to make that possible!

Getting KMime ready for KDE Frameworks

Work on moving more libraries or classes from PIM to Frameworks had been paused for some time while we were doing the transition to Qt 6. But that’s done now, so we can continue.

My main focus for this is KMime, a library for parsing and generating emails. KMime has its origins at the beginning of the century, and while for email- related code that’s actually more on the younger side it’s mature and optimized in what it does, and just needs a bit of polish to catch up with current standards.

This includes:

  • Cleaning up some legacy API from a time when attachments were sort of an afterthought (to KMime but also the email standards).
  • Making more of the API const-correct so parsing a message doesn’t accidentally modify it.
  • Moving some code out of KMime that isn’t really in scope but just had been put there to solve dependency issues in the past.

While doing this and reviewing and adjusting consumer code we also found some duplicated, inefficient or no longer used code in libraries built on top of KMime that got subsequently cleaned up.

Moving classes to KDE Frameworks

Moving code to Frameworks isn’t just about entire libraries, it can also be about a single class or method. MultiplyingLineEdit is such a case that was requested to move, and similar to KMime needed a couple of cleanups.

Sometimes it’s however also about the other way around, phasing out custom infrastructure that is meanwhile equally or better served by code in Frameworks. Pimcommon::ConfigureImmutableWidgetUtils is an example for that, with KConfigDialogManager being a more comprehensive replacement. Porting the remaining uses also progressed.

Travel

Travelling to Toulouse for the sprint also provided some opportunity for field-testing Itinerary.

  • The new Deutsche Bahn BahnCard “replacement documents” are recognized by Itinerary and got me through ticket checks successfully.
  • For the first time I got correct automatic transfer suggestions between railway stations in Paris (ie. take the direct Metro line rather than some nonsensical long distance train chain), as well as to the venue in Toulouse (ie. recommended to walk rather than taking the Metro for one stop), thanks to Transitous. New and stricter preconditions for automatic transfers also help with improving the quality of the suggestions.

And we also got a few improvements out of this:

  • Added support for creating events from OSM office elements, given the sprint was hosted in the rooms of a co-working space.
  • Company capital as sometimes mentioned in the fine print of French business documents (such as hotel bookings) doesn’t confuse the generic price extractor anymore, so your hotel stay is no longer mistakenly shown to cost 3.000.000 Euro.

The return trip turned out particularly exciting with a rare railway electricity outage, which provided ideas for how to extend Itinerary’s alternative connection search.

Categories: FLOSS Project Planets

This week in KDE: Plasma 6.1 cleanups

Planet KDE - Sat, 2024-06-22 02:38

Plasma 6.1 has been released to good reviews! We’ve spent the week fixing issues reported so far, as always. So far we’re in good shape here, with almost all the big issues fixed already. We’re still tracking a few more, such as cases where triple buffering introduced stuttering, or random QML widgets and System Settings pages failing to launch until Qt’s QML cache folder is cleared (if you do this, please save it first and attach it to the bug report).

So this time, lets start with the bug fixes:

Bug Fixes

Moving the pointer right after the screen locks to make it unlock immediately no longer just breaks it entirely instead. In addition, made the screen locker more robust against failure in a few more cases (Xaver Hugl, Plasma 6.1.1. Link 1, link 2, and link 3)

Re-fixed the bug of desktop files dragged to another screen disappearing until Plasma was restarted. This so fixed a case where Plasma could crash when dragging files from the desktop to some folders in Dolphin (David Edmundson, Plasma 6.1.1. Link 1 and link 2)

In Plasma’s new zoomed-out Edit Mode, moving non-center-aligned panels to a different screen edge once again works rather than crashing Plasma (Marco Martin, Plasma 6.1.1. Link)

KWin’s Cube effect can once again be opened reliably (David Edmundson, Plasma 6.1.1. Link)

KWin’s Zoom effect and ICC color profiles now get along better (Xaver Hugl, Plasma 6.1.1. Link)

KWin’s Shake Cursor effect now works as expected with every global animation speed, including animations entirely disabled (Vlad Zahorodnii, Plasma 6.1.1. Link)

Fixed a recent visual regression KWin’s Glide effect (Vlad Zahorodnii, Plasma 6.1.1. Link)

Widgets on the Plasma desktop that are dragged while in the new zoomed-out Edit Mode are now connected to the pointer as expected (Marco Martin, Plasma 6.1.1. Link)

In Discover, the “still looking” busy indicator is no longer visually broken for the first search you make after launching the app (Akseli Lahtinen, Plasma 6.1.1. Link)

Fixed that weird blur glitch when a floating panel de-floats (Marco Martin, KDE Frameworks 6.3.1. Link)

System Settings’ Audio Volume page no longer causes System Settings to crash when you open it for a second time(David Redondo, Qt 6.7.2. Link)

When you drag pinned Task Manager icons to re-arrange them, other icons no longer come along for the ride and ruin everything (Niccolò Venerandi, Qt 6.7.2. Link)

Other bug information of note:

UI Improvements

You can now resize the sidebar and the playlist bar in Elisa to suit your preferences. This is enabled by the recent work to get better a resizable split view control, so expect more of these soon! (Jack Hill, Elisa 24.08.0. Link)

Removed Filelight’s back and forward buttons because they were confusing when paired with the “go up” action (Han Young, Filelight 24.08.0. Link)

A number of countries that use Metric units with the US Letter paper size (e.g. Canada) now get the correct paper size set in System Settings’ Region & Language Page (Han Young, Plasma 6.1.1. Link)

By default, Breeze-themed windows can now be dragged only from their logical and visually distinct header areas, rather than every empty area. This is particularly helpful for control-heavy apps with with lots of draggable UI elements, such as Kdenlive. You can of course change this back if you’d like (me: Nate Graham, Plasma 6.2.0. Link)

In Discover, Flatpak runtimes on the Updates page are now shown in a separate “Application Support” category to clarify their purpose (Ivan Tkachenko, Plasma 6.2.0. Link)

Plasma’s Weather widget now tries to guide you away from weather stations provided by wetter.com, which doesn’t even include current temperature data! These weather stations will now only be shown as a fallback if no other better weather stations are available (Ismael Asensio, Plasma 6.2.0. Link)

Plasma’s Bluetooth widget no longer shows devices you’ve blocked (Ivan Tkachenko, Plasma 6.2.0. Link)

In System Monitor, you can now hide a column from the context menu you’ll see when right-clicking on its header (James Graham, Plasma 6.2.0. Link)

Reverted a change made a few months ago to force single-click on Folder View popups in list mode. These are file views and not menus — despite any superficial similarity — so we now treat them like file views and respect your click preference (me: Nate Graham, Plasma 6.2.0. Link)

System Settings’ Quick Settings pages is now visible in the sidebar rather than the header, matching other KDE apps (me: Nate Graham, Plasma 6.2.0. Link)

The Get New [thing] dialogs now use a more compact view style by default, improving information density (me: Nate Graham, Frameworks 6.4. Link)

Automation & Systematization

Added some GUI tests for various functionality in KWrite (Antoine, Herlicq link)

Added an autotest to verify screen arrangements after XWayland scales change (Xaver Hugl, link)

Added an autotest to verify that power profiles work as expected (Fushan Wen, link)

…And Everything Else

This blog only covers the tip of the iceberg! If you’re hungry for more, check out https://planet.kde.org, where you can find more news from other KDE contributors.

How You Can Help

The KDE organization has become important in the world, and your time and labor have helped to bring it there! But as we grow, it’s going to be equally important that this stream of labor be made sustainable, which primarily means paying for it. Right now the vast majority of KDE runs on labor not paid for by KDE e.V. (the nonprofit foundation behind KDE, of which I am a board member), and that’s a problem. We’ve taken steps to change this with paid technical contractors — but those steps are small due to growing but still limited financial resources. If you’d like to help change that, consider donating today!

Otherwise, visit https://community.kde.org/Get_Involved to discover other ways to be part of a project that really matters. Each contributor makes a huge difference in KDE; you are not a number or a cog in a machine! You don’t have to already be a programmer, either. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

Categories: FLOSS Project Planets

Abhijith PA: abhijithpa.me to abhijithpa.in

Planet Debian - Sat, 2024-06-22 02:33

I let go my domain abhijithpa.me. It was getting expensive and I don’t fancy that anymore. I never actually purchased this domain but came with a package offer. I then kept it for couple of years.

I have now bought a new domain abhijithpa.in and pointed everything to it.

So if you are seeing abhijithpa.me with lot of contents, that is no me. Its either domain squatters or someone impersonating me.

Categories: FLOSS Project Planets

Pages