call_end

    • chevron_right

      Christian Schaller: More adventures in the land of AI and Open Source

      news.movim.eu / PlanetGnome • 9 September • 6 minutes

    I been doing a lot of work with AI recently, both as part of a couple of projects I am part of at work, but I have also taken a personal interest in understanding the current state and what is possible. My favourite AI tool currently is Claude.ai . Anyway I have a Prusa Core One 3D printer now that I also love playing with and one thing I been wanting to do is to print some multicolor prints with it. So the Prusa Core One is a single extruder printer, which means it only has 1 filament loaded at any given time. Other printers on the market, like the PrusaXL has 5 extruders, so it can have 5 filaments or colors loaded at the same time.

    Prusa Single Extruder Multimaterial setting

    Prusa Single Extruder Multimaterial setting


    The thing is that the Prusa Slicer (the slicer is the software that takes a 3d model and prepares the instructions for the printer based on that 3d model) got this feature called Single Extruder Multi Material. And while it is a process that wastes a lot of filament and takes a lot of manual intervention during the print, it does basically work.

    What I quickly discovered was that using this feature is non-trivial. First of all I had to manually add some G Code to the model to actually get it to ask me to switch filament for each color in my print, but the bigger issue is that the printer will ask you to change the color or filament, but you have no way of knowing which one to switch to, so for my model I had 15 filament changes and no simple way of knowing which order to switch in. So people where solving this among other things through looking through the print layer by layer and writing down the color changes, but I thought that this must be possible to automate with an application. So I opened Claude and started working on this thing I ended up calling Prusa Color Mate..

    So the idea for the application was simple enough, have it analyze the project file, extract information about the order of color changes and display them for the user in a way that allows them to manually check of each color as its inserted. So I started off with doing a simple python script that would just print to the console. So it quickly turned out that the hard part of this project was to parse the input files and it was made worse by my ignorance. So what I learned the hard way is that if you store a project in Prusa Slicer it will use this format called 3mf. So my thought was, lets just analyze the 3mf file and extract the information I need. It took my quite a bit of back and forth with Claude, feeding claude source code from Prusa’s implementation and pdf files with specifications, but eventually the application did spit out a list of 15 toolchanges and the colors associated with them. So I happily tried to use it to print my model. I quickly discovered that the color ordering was all wrong. And after even more back and forth with Claude and reading online I realized that the 3mf file is a format for storing 3d models, but that is not what is being fed your 3d printer, instead for the printer the file provided is a bgcode file. And while the 3mf file did contain the information that you had to change filament 15 times, the information on in which order is simply not stored in the 3mf file as that is something chosen as part of composing your print. That print composition file is using a file format called bgcode. So I now had to extract the information from the bgcode file which took me basically a full day to figure out with the help of Claude. I could probably have gotten over the finish line sooner by making some better choices underway, but the extreme optimism of the AI probably lead me to believe it was going to be easier than it was to for instance just do everything in Python.
    At first I tried using this libbgcode library written in C++, but I had a lot of issues getting Claude to incorporate it properly into my project, with Meson and CMAKE interaction issues (in retrospect I should have just made a quick RPM of libbgcode and used that). After a lot of struggles with this Claude thought that parsing the bgcode file in python natively would be easier than trying to use the C++ library, so I went down that route. I started by feeding Claude a description of the format that I found online and asked it to write me a parser for it. It didn’t work very well and I ended up having a lot of back and forth, testing and debugging, finding more documentation, including a blog post about this meatpack format used inside the file, but it still didn’t really work very well. In the end what probably helped the most was asking it to use the relevant files from libbgcode and Prusa Slicer as documentation, because even if that too took a lot of back and forth, eventually I had a working application that was able to extract the tool change data and associated colors from the file. I ended up using one external dependency which was the heatshrink2 library that I PIP installed, but while that worked correctly, it took a look time for me and Claude to figure out exactly what parameters to feed it to work with the Prusa generated file.

    Screenshot of Prusa Color Mate

    Screenshot of Prusa Color Mate

    So know I had the working application going and was able to verify it with my first print. I even polished it up a little, by also adding detection of the manual filament change code, so that people who try to use the application will be made aware they need to add that through Prusa Slicer. Maybe I could bake that into the tool, but atm I got only bgcode decoders, not encoders, in my project.

    Missing G Code warning

    Warning showed for missing G Code Dialog that gives detailed instructions for how to add G Code Dialog that gives detailed instructions for how to add G Code

    So to conclude, it probably took me 2.5 days to write this application using Claude, it is a fairly niche tool, so I don’t expect a lot of users, but I made it to solve a problem for myself. If I had to write this pre-AI myself it would have taken me weeks, like figuring out the different formats and how library APIs worked etc. would have taken me a long time. So I am not an especially proficient coder, so a better coder than me could probably put this together quicker than I would, but I think this is part of what I think will change with AI, that even with limited time and technical skills you can put together simple applications like this to solve your own problems.

    If you are a Prusa Core One user and would like to play with multicolor prints you can find Prusa Color Mate on Gitlab . I have not tested it on any other system or printer than my own, so I don’t even know if it will work with other non-Core One Prusa printers. There are rpms for Fedora you can download in the packaging directory of the gitlab repo, which also includes a RPM for the heatshrink2 library.

    As for future plans for this application I don’t really have any. It solves my issue the way it is today, but if there turns out to be an interested user community out there maybe I will try to clean it up and create a proper flatpak for it.

    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /uraeus/2025/09/09/more-adventures-in-the-land-of-ai-and-open-source/

    • chevron_right

      Georges Basile Stavracas Neto: Marks and counters in Sysprof

      news.movim.eu / PlanetGnome • 8 September • 5 minutes

    Last year the Webkit project started to integrate its tracing routines with Sysprof . Since then, the feedback I’ve received about it is that it was a pretty big improvement in the development of the engine! Yay.

    People started using Sysprof to have insights about the internal states of Webkit, gather data on how long different operations took, and more. Eventually we started hitting some limitations in Sysprof, mostly in the UI itself, such as lack of correlational and visualization features.

    Earlier this year a rather interesting enhancement in Sysprof was added: it is now possible to filter the callgraph based on marks . What it means in practice is, it’s now possible to get statistically relevant data about what’s being executed during specific operations of the app.

    In parallel to WebKit, recently Mesa merged a patch that integrates Mesa’s tracing routines with Sysprof . This brought data from yet another layer of the stack, and it truly enriches the profiling we can do on apps. We now have marks from the DRM vblank event, the compositor, GTK rendering, WebKit, Mesa, back to GTK, back to the compositor, and finally the composited frame submitted to the kernel. A truly full stack view of everything.

    Screenshot of Sysprof showing Mesa and Webkit marks

    So, what’s the catch here? Well, if you’re an attentive reader, you may have noticed that the marks counter went from this last year:

    Screenshot of the marks tab with 9122 marks

    To this, in March 2025:

    Screenshot of the marks tab with 35068 marks

    And now, we’re at this number:

    Screenshot of the marks tab with 3243352 marks

    I do not just when I say that this is a significant number! I mean, just look at this screenshot of a full view of marks:

    Screenshot of the Sysprof window resized to show all marks. It's very tall.

    Naturally, this is Sysprof to its limits! The app is starting to struggle to handle such massive amounts of data. Having so much data also starts introducing noise in the marks – sometimes, for example, you don’t care about the Mesa marks, or the WebKit marks, of the GLib marks.

    Hiding Marks

    The most straightforward and impactful improvement that could be done, in light of what was explained above, was adding a way to hide certain marks and groups.

    Sysprof heavily uses GListModels, as is trendy in GTK4 apps, so marks, catalogs, and groups are all considered lists containing lists containing items. So it felt natural to wrap these items in a new object with a visible property, and filter by this property, pretty straightforward.

    Except it was not 🙂

    Turns out, the filtering infrastructure in GTK4 did not support monitoring items for property changes. After talking to GTK developers, I learned that this was just a missing feature that nobody got to implementing. Sounded like a great opportunity to enhance the toolkit!

    It took some wrestling, but it worked , the reviews were fantastic and now GtkFilterListModel has a new watch-items property . It only works when the the filter supports monitoring, so unfortunately GtkCustomFilter doesn’t work here. The implementation is not exactly perfect, so further enhancements are always appreciated.

    So behold! Sysprof can now filter marks out of the waterfall view:

    Counters

    Another area where we have lots of potential is counters. Sysprof supports tracking variables over time. This is super useful when you want to monitor, for example, CPU usage, I/O, network, and more.

    Naturally, WebKit has quite a number of internal counters that would be lovely to have in Sysprof to do proper integrated analysis. So between last year and this year, that’s what I’ve worked on as well! Have a look:

    Image of Sysprof counters showing WebKit information

    Unfortunately it took a long time to land some of these contributions, because Sysprof seemed to be behaving erratically with counters. After months fighting with it, I eventually figured out what was going on with the counters, and wrote the patch with probably my biggest commit message this year (beat only by few others, including a literal poem .)

    Wkrictl

    WebKit also has a remote inspector, which has stats on JavaScript objects and whatnot. It needs to be enabled at build time, but it’s super useful when testing on embedded devices.

    I’ve started working on a way to extract this data from the remote inspector, and stuff this data into Sysprof as marks and counters. It’s called wkrict . Have a look:

    This is far from finished, but I hope to be able to integrate this when it’s more concrete and well developed.

    Future Improvements

    Over the course of an year, the WebKit went from nothing to deep integration with Sysprof, and more recently this evolved into actual tooling built around this integrations. This is awesome, and has helped my colleagues and other contributors to help the project in ways it simply wasn’t possible before.

    There’s still *a lot* of work to do though, and it’s often the kind of work that will benefit everyone using Sysprof, not only WebKit. Here are a few examples:

    • Integrate JITDump symbol resolution , which allows profiling the JavaScript running on webpages. There’s ongoing work on this, but needs to be finished.
    • Per-PID marks and counters. Turns out, WebKit uses a multi-process architecture, so it would be better to redesign the marks and counters views to organize things by PID first, then groups, then catalogs.
    • A new timeline view. This is strictly speaking a condensed waterfall view, but it makes it more obvious the relationship between “inner” and “outer” marks.
    • Performance tuning in Sysprof and GTK. We’re dealing with orders of magnitude more data than we used to, and the app is starting to struggle to keep up with it.

    Some of these tasks involve new user interfaces, so it would be absolutely lovely if Sysprof could get some design love from the design team. If anyone from the design team is reading this, we’d love to have your help 🙂

    Finally, after all this Sysprof work, Christian kindly offered me to help co-maintain the project, which I accepted. I don’t know how much time and energy I’ll be able to dedicate, but I’ll try and help however I can!

    I’d like to thank Christian Hergert, Benjamin Otte, and Matthias Clasen for all the code reviews, for all the discussions and patience during the influx of patches.

    • wifi_tethering open_in_new

      This post is public

      feaneron.com /2025/09/08/marks-and-counters-in-sysprof/

    • chevron_right

      Hubert Figuière: Dev Log August 2025

      news.movim.eu / PlanetGnome • 7 September • 1 minute

    Some of the stuff I did in August.

    AbiWord

    More memory leaks fixing.

    gudev-rs

    Updated gudev-rs to the latest glib-rs, as a requirement to port any code using it to the latest glib-rs.

    libopenraw

    A minor fix so that it can be used to thumbnail JPEG file extracting the preview.

    Released alpha.12.

    Converted the x-trans interpolation to use floats. Also removed a few unnecessary unsafe blocks.

    Niepce

    A lot of work on the importer. Finally finished that UI bit I had in progress of a while and all the downfall with it. It is in the develop branch which mean it will be merged to main . The includes some UI layout changes to the dialog.

    Then I fixed the camera importer that was assuming everyone followed the DCIM specification (narrator: no they didn't). This mean it was broken on iPhone 14 and the Fujifilm X-T3 that has two card slot (really, use a card reader if the camera uses memory cards). Also sped it up, it's still really slow.

    Also better handle the asynchronous tasks running on a thread like the thumbnailing or camera import list content. I'm almost ready to move on.

    Tore up code using gdkpixbuf for many reasons. It's incompatible with multiple threads, gdk texture were already created from raw buffers. This simplify a lot of things.

    • wifi_tethering open_in_new

      This post is public

      www.figuiere.net /hub/wlog/dev-log-august-2025/

    • chevron_right

      Adetoye Anointing: From Intern To Impact: Building A Future As An Engineer

      news.movim.eu / PlanetGnome • 2 February, 2025 • 3 minutes

    As my Outreachy internship with GNOME concludes, I’m reflecting on the journey, the effort, the progress, and, most importantly, the future I envision in tech.

    The past few months as an intern have been both challenging and incredibly rewarding. From quickly learning a new programming language to meet project demands, to embracing test-driven development and tackling progressively complex tasks, every experience has been a stepping stone. Along the way, I’ve honed my collaboration and communication skills, expanded my professional network, and developed a deep appreciation for the power of community and open source.

    This Outreachy internship has been a pivotal experience, solidifying these values and teaching me the importance of embracing challenges and continuously improving my technical and interpersonal skills, preparing me for the next stage of my engineering career. The supportive environment I found in the GNOME community has been instrumental to my growth. I’m incredibly grateful for my mentor, Federico, who exemplified what true mentorship should be. He showed me the importance of collaborative spirit, genuine understanding of team members, and even taking time for laughter – all of which made transitioning to a new environment seamless and comfortable. His guidance fostered open communication, ensuring seamless synchronization and accessibility. Just before writing this, I had a call with Federico, Felipe (the GNOME Internship Coordinator, an awesome person!), and Aryan to discuss my career post-internship.

    While the career advice was invaluable, what truly stood out was their collaborative willingness to support my growth. This dedication to fostering progress is something I deeply admire and will strive to make a core part of my own engineering culture.

    My journey from intern to engineer has been significantly shaped by the power of community, and I’m now ready to push myself further, take on new challenges, and build a solid, impactful, and reputable career in technology.

    Skills

    I possess a strong foundation in several key technologies essential for software and infrastructure engineering.

    My primary languages are Golang and Rust , allowing me to build high-performance and reliable systems. I also have experience with Python. I’m a quick learner and eager to expand my skillset further.

    Career Goals

    My ultimate career aspiration is to secure a role that challenges me to grow as an engineer while contributing to impactful and innovative projects. I am particularly drawn to:

      • Cultivating a culture of creativity and structured development while optimizing myself to become the best engineer I can be—just like my Outreachy experience.
      • Developing and sustaining critical infrastructure that powers large-scale, globally utilized systems, ensuring reliability, security, and seamless operation.
      • Exploring opportunities at MANGA or other big tech companies to work on complex systems, bridging software engineering, security, and infrastructure.
    • Motivation

    While the challenge of growth is my primary motivation, the financial stability offered by these roles is also important, enabling me to further invest in my personal and professional development.

    Relocation is a significant draw, offering the opportunity to experience different cultures, gain new perspectives and immerse myself in a global engineering community.

    As an introverted and private person, I see this as a chance to push beyond my comfort zone, engage with a diverse range of collaborators, and build meaningful connections.

    Job Search

    I am actively seeking software engineering, infrastructure, and site reliability roles. I am particularly interested in opportunities at large tech companies, where I can contribute to complex systems and further develop my expertise in Golang and Rust after concluding my Outreachy internship with Gnome is concluded in march 2025.

    exploring the opportunities

    I’m eager to explore software engineering, open source, infrastructure, and site reliability roles. If your team is seeking someone with my skills and experience, I’d welcome a conversation. Connect with me via email or LinkedIn .

    I’m excited about the future and ready to take the next step in my career. With the foundation I’ve built during this internship, I’m confident in my ability to make a meaningful impact in the tech industry

    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /yorubad-dev/2025/02/02/from-intern-to-impact-building-a-future-as-an-engineer/

    • chevron_right

      Matthias Clasen: What’s new in GTK, winter 2025 edition

      news.movim.eu / PlanetGnome • 1 February, 2025 • 2 minutes

    We just had a GTK hackfest at FOSDEM. A good time for an update on whats new and exciting in GTK, with an eye towards 4.18.

    GTK hackfest 2025 Requirements

    You can no longer call gdk_display_get_default() or gdk_display_open() before gtk_init(). This was causing problems due to incomplete initialization, so we made it fail with a (hopefully clear) error message. If you are affected by this, the usual fix is to just call gtk_init() as early as possible.

    On Windows, we have a hard requirement on Windows 10 now. All older versions are long unsupported, and having to deal with a maze of ifdefs and unavailable APIs makes development harder than it should be. Dropping support for very old versions also simplifies the code down the stack, in Pango and GLib.

    The same idea applies to macOS, where we now require macOS 10.15.

    Spring cleaning

    The old GL renderer has been removed. This may be unwelcome news for people stuck on very old drivers and hardware. But we will continue to make the new renderers work as well as possible on the hardware that they can support.

    The X11 and Broadway backends have been deprecated, as a clear signal that we intend to remove them in the GTK 5. In the meantime, they continue to be available. We have also deprecated GtkShortcutsWindow, since it needs a new design. The replacement will appear in libadwaita, hopefully next cycle.

    It is worth reminding everybody that there is no need to act on deprecations until you are actively porting your app to the next major version of GTK, which is not on the horizon yet.

    Incremental improvements

    Widget layout and size allocation has received quite a bit of attention this cycle, with the goal of improving performance (by avoiding binary search as much as possible) and correctness. Nevertheless, these changes have some potential for breakage, so if you see wrong or suboptimal layouts in applications, please let us know.

    GTK has had difficulties for a while getting its pointer sizes right with fractional scaling on Wayland, but this should all be solved in GTK 4.18. No more huge pointers. Fixing this also required changes on the mutter side.

    New beginnings

    Accessibility in GTK 4.18 is taking a major step forward, with the new AccessKit backend, which gives us accessibility on  Windows and macOS, for the very first time. The at-spi backend is still the default on Linux, and has seen a number of improvements as well.

    And, maybe the biggest news: We have an Android backend now. It is still experimental, so you should expect some rough edges and loose ends. For example, there is no GL renderer support yet. But it is exciting that you can just try gtk4-demo on your phone now, and have it mostly work.

    Enjoy!

    • wifi_tethering open_in_new

      This post is public

      blog.gtk.org /2025/02/01/whats-new-in-gtk-winter-2025-edition/

    • chevron_right

      This Week in GNOME: #185 Adwaita Sans

      news.movim.eu / PlanetGnome • 31 January, 2025 • 5 minutes

    Update on what happened across the GNOME project in the week from January 24 to January 31.

    GNOME Core Apps and Libraries

    Allan Day reports

    GNOME changed its UI and monospace fonts this week, in a long anticipated change that is planned for GNOME 48. The new fonts are called Adwaita Sans and Adwaita Mono. Adwaita Sans is a modified version of Inter, and replaces Cantarell as the UI font. Adwaita Mono is a modified version of Iosevka, and replaces Source Code Pro as the default monospace font. This feature was implemented by Jamie Gravendeel, with last-minute assistance from Florian Muellner.

    Libadwaita

    Building blocks for modern GNOME apps using GTK4.

    Alice (she/her) announces

    libadwaita now provides API for accessing the system monospace and document fonts, both programmatically and from CSS .

    Additionally, the .monospace style class uses the system font now, instead of monospace , so apps don’t need to access it themselves from the settings portal and gsettings anymore

    GTK

    Cross-platform widget toolkit for creating graphical user interfaces.

    Emmanuele Bassi says

    The GTK developers held a hackfest in Brussels, covering various topics:

    • accessibility
    • text rendering
    • deprecations
    • new Android backend
    • GTK5 features

    A full report will be published on the GTK development blog , so keep a keen eye for it

    Text Editor

    Text Editor is a simple text editor that focus on session management.

    Allan Day announces

    Some news from a previous week: a collection of design updates have appeared in Text Editor, in time for the upcoming GNOME 48 release. The changes include a new document sidebar, which combines document properties and settings. There is also a new floating line/column indicator.

    Settings

    Configure various aspects of your GNOME desktop.

    Allan Day reports

    Work continued on GNOME’s new Digital Wellbeing features this week. Changes were made to allow screen time to be viewed independently of the screen time limit feature, and a setting was added to allow screen time recording to be disabled. The labels in the settings panel were also polished. Much of this work was made possible by an Endless grant to the GNOME Foundation.

    GNOME Circle Apps and Libraries

    Brage Fuglseth (he/him) reports

    This week Iotas was accepted into GNOME Circle. Iotas aims to provide distraction-free note taking, and lets you sync your notes across devices with Nextcloud. Congratulations!

    Hieroglyphic

    Find LaTeX symbols

    FineFindus says

    A new Hieroglyphic update has been released, bringing a number of improvements:

    • Improved classifier, which now includes the nearly 500 user-contributed symbols, thanks to everyone who helped.
    • The backend infrastructure has been updated to make it easier for future improvements to the classifier.
    • The drawing area has been rewritten to use GTK4’s rendering capabilities instead of Cairo.

    Graphs

    Plot and manipulate data

    Sjoerd Stendahl reports

    This week we released version 1.8.4 of Graphs, it’s a minor release primarily focusing on the update to the GNOME 47 runtime:

    • Update to the GNOME 47 runtime, with support for accent colours.
    • The rubberband on the canvas has been improved, now it has rounded corners similar to Nautilus
    • Equation parsing has been improved, now handling edge-cases better. It’s now also completely case-insensitive, meaning “Pi” and “PI” are both acceptable variants of the greek letter π.

    Meanwhile we’re working hard on the next major release. The latest main channel on our Gitlab now has support for actual equations spanning an infinite canvas, and operations are calculated analytically with the equations changing their names accordingly. We’ve also got a brand new style-editor with a live preview. Stay tuned for an announcement on this later on, in the meantime you can check out the upcoming release on the Flathub beta channel.

    Gaphor

    A simple UML and SysML modeling tool.

    Arjan announces

    This week Dan Yeaw release Gaphor 3.0. This release is a major step forward. It contains a lot of UI updates. In addition Gaphor’s internal data models has been updated and improved. More details you can find in this blog post . You can find the latest version in Flatpak. macOS and Windows versions are available from our website .

    Third Party Projects

    Fractal

    Matrix messaging app for GNOME written in Rust.

    Kévin Commaille announces

    How are you going to find your friends and coordinate end of day drinks when you’re lost in the middle of a large crowd in a big city? With the new version of your favorite Matrix client, of course! Here is Fractal 10.

    • The QR code scanning code has been ported to libaperture , the library behind GNOME Camera. This should result in better performance and more reliability.
    • OAuth 2.0 compatibility was added, to make sure that we are ready for the upcoming authentication changes for matrix.org .
    • Pills for users and rooms mentions show consistently in the right place instead of seemingly random places, getting rid of one of our oldest and most annoying bug.
    • Attachments go through the send queue, ensuring correct order of all messages and improving the visual feedback.
    • Videos were often not playing after loading in the room history. This was fixed, and we also show properly when an error occurred.
    • We were downloading too many different sizes for avatar images, which would fill the media cache needlessly. We now only download a couple of sizes. This has the extra benefit of fixing blurry or missing thumbnails in notifications.

    As usual, this release includes other improvements and fixes thanks to all our contributors, and our upstream projects.

    We want to address special thanks to the translators who worked on this version. We know this is a huge undertaking and have a deep appreciation for what you’ve done. If you want to help with this effort, head over to Damned Lies .

    This version is available right now on Flathub .

    We have a lot of improvements in mind for our next release, but if you want a particular feature to make it, the surest way is to implement it yourself! Start by looking at our issues or just come say hello in our Matrix room .

    Parabolic

    Download web video and audio.

    Nick announces

    Parabolic V2025.1.4 was also released this week with some new features and fixes!

    Here’s the full changelog:

    • Added a new Embed Thumbnails option in Preferences to enable/disable Parabolic’s downloading of thumbnails separate from metadata
    • Added a disclaimer about embedding thumbnails/subtitles when using generic file types
    • Fixed an issue where the incorrect previous video and/or audio format was selected
    • Fixed an issue where chapters were embedded even if the option was disabled
    • Fixed an issue where splitting media by chapters would result in incorrect media lengths in the split files
    • Fixed an issue where video and audio formats were not selectable on GNOME

    Events

    Kristi Progri reports

    CFP for Linux App Summit 2025 is now open! Join us in Tirana, Albania on April 25-26th. Submit your paper by Feb 15th https://conf.linuxappsummit.org/event/7/

    For more information and updates check our website: https://linuxappsummit.org/

    That’s all for this week!

    See you next week, and be sure to stop by #thisweek:gnome.org with updates on your own projects!

    • chevron_right

      Michael Meeks: 2025-01-30 Thursday

      news.movim.eu / PlanetGnome • 30 January, 2025

    • Up earlyish, tech planning call, plugged away at mail and task backlog.
    • Published strip #3 early - two in one week!? a FOSDEM special; explaining open roads:
    • Meeting with a partner; out to the inaugural ceremony of the European Open Source Awards, talked to smart people until late.
    • wifi_tethering open_in_new

      This post is public

      meeksfamily.uk /~michael/blog/2025-01-30.html

    • chevron_right

      Tim Janik: Integrating jj-fzf into Emacs

      news.movim.eu / PlanetGnome • 29 January, 2025

    Introduction Built on jj and fzf, jj-fzf offers a text-based user interface (TUI) that simplifies complex versioning control operations like rebasing, squashing, and merging commits. This post will guide you through integrating jj-fzf into your Emacs workflow, allowing to switch between emacs and jj…
    • wifi_tethering open_in_new

      This post is public

      testbit.eu /2025/jj-fzf-in-emacs

    • chevron_right

      Alice Mikhaylenko: New Website

      news.movim.eu / PlanetGnome • 29 January, 2025 • 1 minute

    I finally got distracted enough to finish my website that has been saying "under construction" for over a year, since I set up this server for my Sharkey instance.

    I've wanted to do this for a while - one, so that I actually have a home page, and two, so that I can move my blog here instead of using WordPress.

    Setup

    Initially I wanted to use a static generator like Hugo, but then I discovered that the web server I'm using ( Caddy ) can do templates . That's perfectly enough for a simple blog, so I don't actually need a separate generator. This very article is a markdown document , parsed and embedded into a nice-looking page and RSS feed using templates.

    In addition, I get all the niceties I couldn't get before:

    • Using Markdown instead of HTML with WordPress-specific additions for e.g. image galleries.

    • Proper code listings with syntax highlighting (you'll have to view this on the original page though, not from Planet GNOME or your RSS reader):

      <property name="child">
        <object class="AdwToastOverlay" id="toast_overlay">
          <property name="child">
            <object class="AdwNavigationView" id="nav_view"/>
          </property>
        </object>
      </property>
      
    • Dark mode support, incl. for images (again, no clue if this works on Planet GNOME):

      Screenshot of Apostrophe with this text as Markdown on the left and a preview on the right Me writing this very post in Apostrophe
    • Just simple niceties like smaller monospace font - I do this a lot and I don't particularly like the way the WordPress theme I was using presents it.

    • Finally, while migrating my old posts I had an opportunity to update broken links (such as to the old documentation) and add missing alt text as in quite a few images I set WordPress description instead of alt text and never noticed. If you really want the old version, it's still on the old website and each migrated article links to its original counterpart.

    So yeah, so far this was fairly pleasant, I expected much worse. There are still a bunch of things I want to add (e.g. previewing images at full size on click), but it's not like my old blog had that either.

    • wifi_tethering open_in_new

      This post is public

      nyaa.place /blog/new-website