Skip to content

Saturday, 3 June 2023

Note: Old links to my site may not work anymore, due to change in the URL layout!! I tried to make a redirect for them however.

Blog update

I have finally updated my blog look and feel. In fact, I completely switched my static site generator from Jekyll to Zola!

I used Jekyll at first due to it being the one that Github Pages used. It was clunky but once set up it just did the job.

But the reason why I changed to Zola was not Jekyll itself, it was the mess of setting up Ruby on my home PC.

I tried Ruby Version Manager, using Ruby from DNF packages, changing paths, but there was always some package that kept failing. All I wanted to do is test my site before I push it to server. I couldn't test on my own PC. Yes, I had to test on production!

And I didn't want to set a virtual machine or docker or whatever for a dang static site generator. That is just silly!

So instead I went with Zola since my friend told me about it. Zola is just a single binary that you run and it does the magic for you, which is all I wanted.

Moving from Jekyll to Zola was a bit messy, due to the differences in markdown files, but I could mostly just use Kate powerful search and replace regexp stuff to switch things over.

Then I set up myself a theme, but it wasn't completely explained how it works.. Basically I had to have exact matching files from the theme in my own blog source folder, and Zola could then build it. The files had to include {% extends "theme/templates/page.html" %} in them too, otherwise it failed to show the theme.

After getting the theme up and running, I just modified it heavily (Source here) with my own colorscheme.

Revontuli

Speaking of the colorscheme: AksDark has now a proper name! Revontuli!

Screenshot of Revontuli in Konsole

Screenshot of Revontuli in KDE Plasma

Yes, the colors are the same as before really, but the name is now different. Some colorschemes for apps Kate and Konsole have tiny differences though. These are the ones I'm going to update onwards.

Check out it's repository for the applications support: https://codeberg.org/akselmo/Revontuli

I didn't want to use "AksDark" as a name anymore, since I have seen people download it and I've gotten few comments telling me they like it too. I wanted something that works for it, and my wife (well, she is gonna be my wife in couple weeks.. :D ) came up with "Revontuli" for the name.

Revontuli is a Finnish word that means "northern light." She said it works because it's dark theme but colorful, like northern lights are colorful against a dark sky.

The plan is to have collection of matching themes for various applications, be it code editors or other applications. When it comes to code editors, I want the syntax highlighting be exactly the same, and if not exactly, then very closely similar.

This helps a lot if one wants to switch editors, but they don't have to relearn the new syntax highlighting.

I first used Themer.dev (link has Revontuli applied) to generate themes for applications, but there was a problem: Many of the syntax highlighting definitions do not match each other. I do hope Themer developers and contributors will look into this and unify the colorschemes.

However, I do love Themer, so if any devs of Themer are reading this, thank you for the great generator. It helped Revontuli to start as a colorscheme, and I hope eventually people will contribute Revontuli colors for all kinds of apps! :)

I will be uploading the Revontuli themes soon:tm: (either today or tomorrow) after this post to KDE store, so you can search from there. In the meanwhile you can get the colorschemes from the repository, where they're always up-to-date.

Again, thanks for liking AksDark! I hope Revontuli will serve you well from now on! It works great for me, at least. ;)

I kinda want to write more

I have bunch of weird blog ideas but I have not written them since they're not that "relevant" to maybe what people want to read here. I am trying to get out of that mindset and start posting more, be it very short posts or long novels. I will try to start tagging my posts too if I do that more often. It's my blog, I'm allowed to write whenever I want and how much I want!

Quick bit about blog comments

I am currently testing out how the blog comments would work if one would use email instead. Check below for mailing list link and mail link. The mailing list is hosted on https://sr.ht.

That's all for this time, thanks for reading!

Friday, 2 June 2023

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


Tags: tech, ai, machine-learning, data, copyright, japan

This is looking like a bad move. Clearly the fault of western countries though which let things unfold ambiguously regarding copyright… Now Japan is weakening copyright for everyone.

https://technomancers.ai/japan-goes-all-in-copyright-doesnt-apply-to-ai-training/


Co-Writing with Opinionated Language Models Affects Users’ Views

Tags: tech, ai, gpt, ethics, influence

This is early research of course but still the results are interesting. Once again, we’re much easier to influence than we’d like.

https://dl.acm.org/doi/pdf/10.11453544548.3581196


Turds

Tags: tech, ai, gpt, art

So close… and still. This is clearly still in the uncanny valley department at times.

https://novalis.org/blog/2023-05-30-turds.html


Reflections on Ten Years Past The Snowden Revelations

Tags: tech, internet, ietf, protocols, privacy, surveillance, attention-economy, security, history, politics

This is an excellent and needed work of contextualization. Ten years after, looking back at how the Snowden Revelations impacted the internet and the work done by the IETF. It also shows there is plenty more to do…

https://www.ietf.org/archive/id/draft-farrell-tenyearsafter-00.html


How to Stare at Your Phone Without Losing Your Soul | Sim O.N.E. (Observations, Nonsense, Exaggerations)

Tags: tech, smartphone, attention-economy

This is a good point, this is a quality before quantity type of problem.

https://simone.org/tracking-screen-time/


Linear feeds are a dark pattern

Tags: tech, social-media, fediverse, ux, design

Clearly the UI design matters quite a bit in term of how addictive all those social network systems are. The alternative proposed here is interesting, I wish it’d be more widely implemented.

https://tilde.town/~dzwdz/blog/feeds.html


halting problem : Configuring portals

Tags: tech, desktop, foss, linux, flatpak

This looks like a move in the right direction regarding desktop portals on Linux.

https://www.bassi.io/articles/2023/05/29/configuring-portals/


Cornell Virtual Workshop: Vectorization

Tags: tech, performance, vector

Nice and thorough workshop on vectorization, where it comes from, what it can do and how you can write code which is easier to vectorize for the compiler.

https://cvw.cac.cornell.edu/vector/


How to discover all the data sources, low-fuss way

Tags: tech, architecture, data, storage

Interesting way to list all the data stores of your system and map them. Has the advantage of being very lean and simple to apply.

https://minimalmodeling.substack.com/p/how-to-discover-all-the-data-sources


On Software Dependency Engineering - HackMD

Tags: tech, supply-chain, foss

Interesting idea, for sure on a complex enough system just managing the dependencies can quickly become a full time job.

https://hackmd.io/@cflewis/Sk0gb9ILh


Feedback: I try to answer “how to become a systems engineer”

Tags: tech, system, engineering, software, expertise, learning

This rings true to me. What a messy path to get better at our craft!

https://rachelbythebay.com/w/2023/05/30/eng/


Fold ‘N Fly » Paper Airplane Folding Instructions

Tags: paper, origami, funny

Who would have thought there are so many ways to make paper airplanes?

https://www.foldnfly.com/#/1-1-1-1-1-1-1-1-2



Bye for now!

While the use of an ARM-based platform on desktops quickly became the "next big thing" in the macOS world a while ago, the situation in the Microsoft Windows ecosystem is a bit different. One of the values of the Windows platform is a long retention of established architectures. Due to this, an adoption of a "new" architecture is slower on Windows. Even though Windows on ARM provides emulation for running x64 binaries, there is a performance cost for this. Some of our users ask to provide native support for Windows on ARM (WoA). In this blogpost, you will learn what is available today and get insights on where we want to go.

Thursday, 1 June 2023

 

KStars v3.6.5 is released on 2023.06.01 for MacOS, Linux, and Windows. It's a bi-monthly bugfix release with a couple of exciting features.


Sky Map Rotation


Akarsh Simha added a new feature to allow the user to rotate the sky map. It also allows some standard settings like inverted view. Here are some the highlights:
  1. Rotate the sky-map freely: Shift + mouse drag on the sky map
  2. Pick pre-defined orientations: Zenith Up / Zenith Down / North Up / North Down depending on the coordinate system being used
  3. A magic mode for Dobsonians: The Erect Observer Correction feature, when selected along with Horizontal Coordinates / Zenith Down settings, will reproduce the orientation seen in the eyepiece of a Dobsonian. May need a one-time adjustment for your specific Dobsonian using the shift + drag feature.





Optimal Sub-Exposure Calculator


Joseph McGee made his first contributor to KStars with the Optimal Sub-Exposure Calculator. This is the first iteration of the calculator and only a handful of camera profiles is supported. There are different points of view within the astrophtography community on how optimal sub-exposure should be calculated and whether we should consider other factors such as processing time given the volume of data produced. Your feedback would be appreciated on this first iteration of the calculator.

Implementation of an optimal sub-exposure calculator based upon the work of, and presentation by, Dr Robin Glover. The calculator considers multiple inputs to determine a sub-exposure time which will provide minimal overall noise in the image:


  • A sky quality measurement (SQM) for light pollution
  • The optic focal length
  • A filter bandwidth
  • Camera read-noise (based upon gain/iso)
  • An optional adjustment to the allowable increase in noise from light pollution

As inputs are adjusted the calculator will refresh graphic presentation of potential exposure times of the range of gains, and update calculated outputs. The output values are separated into two sections: one for the sub-exposure, and another for image stacks of various integration times.

The sub-exposure outputs are:

  • the optimal sub-exposure time
  • the count of electrons produced from light-pollution
  • the shot noise, (noise from light pollution)
  • the total exposure noise, (the combined noise from light-pollution and camera read-noise)

The image stack information is presented in a table showing:

  • planned integration hours
  • the count of exposures to reach the planned integration hours
  • the actual stack (integration time) in seconds
  • the noise for the stack
  • a ration of stack time to noise, (as a indicator of quality)

An instance of the sub-exposure calculator can be started from a new 'clock' icon on the ekos capture screen. Multiple instances of the sub-exposure calculator can be started concurrently so that side-by-side comparisons can be made for variations in inputs.

Data for camera read-noise will be provided through individual xml files which will be user maintained and published in a repository. These camera data files persisted within a folder "exposure_calculator" under user/local/share/kstars. The calculator includes the capability to download camera files from a repository. Upon the initial start of the calculator at least one camera data file download will be mandatory before the calculator can be instantiated.

The intent is that camera data file names will be used to allow the calculator to select an appropriate camera data file based upon the device id of the active camera. (But some of the initial camera files were named using educated guesses, and will likely need to be re-named).


Rotator Dialog Improvements


Toni Schriber merged improvements and fixes for the Rotator Dialog. As shown in the illustrations the user interface is very simple and there is only one parameter to set: The Camera Position Angle. It is a very consistent term and easy to understand. The same Position Angle (PA) is also used in Alignment, Scheduler, and the Sky Map.


In the gauge this angle is presented in the same color as the FOV in the planetarium sky and in viewing direction. This way one can relate and understand this angle intuitively. The rotator angle is presented in gray and also in viewing direction. This angle is calculated from the Camera PA and the Cameras Offset Angle which is calibrated each time a [Capture & Solve] or a [Load & Slew] is brought into action. For further clarity the rotator angle and the camera offset is displayed again in a information window together with the current pier side.

The Rotator Settings can be accessed either in the Capture or Align modules.


Focus Linear 1 Pass Improvements


John Evans continued his phenomenal improvements to Ekos Focus module with L1P Phase 2 changes as detailed in the Linear Focus Phase 2 document. Here are the highlights:

  1. Optimized curve fitting . Should be faster and more accurate and includes outlier rejection.
  2. Currently HFR is the only fitting "measure" available. The following have been added: a) HFR Adj (adjusted HFR to compensate for star brightness vs background variation) b) FWHM c) Number stars (max at focus rather than a min) d) Fourier Power (alternative focus method not requiring star detection)
  3. Focus units can be displayed in pixels or arc-seconds.
  4. Critical Focus Zone - a calculator with 3 different algorithms has been added
  5. Focus Offset Utility to automatically build focus offsets.
  6. Take flats at same focus point as lights has been fixed.
  7. Focus Adviser. Still working on this but a tool to help with focus parameters (since there are now so many).
  8. SEP parameters suggestions for focus. Keen to get some feedback on this.
  9. Adaptive focus to adapt the focuser position between Autofocus runs, aiming to keep optimum focus for each sub-frame. Adaptations for Temperature and Altitude are supported.
  10. Adaptive focuser start . The starting position for an AF run can be filter and Adaptive Focus adjusted.
  11. Focus walks added to control how the inward sweep of the AF process performs.
  12. AF Overscan originally implemented in the Linear algorithm and then reused by Linear 1 Pass now extended to all focuser movements.

In addition to HFR, you can now use different measurements (FHWM, # of Stars, Fourier Power) that may work well with your setup and environment. Here are some focus runs with each of the new measurements types. You will notice that the solutions are very close to each other.

FWHM




# Of Stars



Fourier Power





Focus Aberration Inspector


Wolfgang Reissenberger introduced the mosaic view well known from PixInsight's AberrationInspector script that builds a mosaic from all image corners and center tiles such that they can be compared directly.

Supernovae are back


The last few releases was missing supernovae data since the online source that was providing the data decided to go offline. Thankfully, Philipp Auersperg-Castell communicated with the fine folks over the Transient Name Server (IAU Supernovae Working Group) to obtain daily supernovae updates and imported them to KStars. All Recent supernovae should be available now in KStars.







Wednesday, 31 May 2023

I was messing around with some code that implements a widget hierarchy today, and bumped into some interesting edge cases of virtual functions. Parameters with a default value behave in an unexpected way.

Here is a vastly simplified code snippet:

#include <fmt/core.h>
struct Base { virtual void Func(int v = 42) = 0; };
struct DerivedA : public Base {
  void Func(int v) override { fmt::print("A={}\n", v); }
};
struct DerivedB : public Base {
  void Func(int v = 8) override { fmt::print("B={}\n", v); }
};

There is a abstract base class (with a virtual function defined = 0) and two derived classes which override the virtual function in the base. Note that one of the derived classes forgets the default value of the parameter, and the other gives it a different value.

Note the use of the contextual keyword override. See item 12 in Scott Meyers Effective Modern C++. It makes the compiler complain in the function declaration that is decorated with it, is not actually an override. Examples of not-an-override come from typo’s, different return or parameter types, different constness .. there’s a bunch of ways to get it wrong, which is why the advice is to use override liberally.

Let’s call those virtual functions via a pointer-to-base and a pointer-to-derived in all four possible variations, shall we?

int main() {
  Base * ba = new DerivedA;
  Base * bb = new DerivedB;
  auto * da = new DerivedA;
  auto * db = new DerivedB;
  ba->Func();
  bb->Func();
  da->Func(3);
  db->Func();
}

You may ask: why does da->Func() need a parameter? Well, there is no default given in the declaration in the derived class. The default value provided in the base class is hidden.

If I leave the value 3 out, then clang suggests that I call Base::Func() instead. That compiles, and then fails to link because – and that’s the whole point – Base::Func() is pure virtual.

The output of the program is this:

A=42
B=42
A=3
B=8

When called through a pointer-to-base, the default value from the declaration in the base class is used. When called through a pointer-to-derived, the default value from the declaration in that derived class is used (or, if there is none, then you need to provide a value).

Takeaway

Now that I ran into this, I looked it up on cppreference, which says

The overriders of virtual functions do not acquire the default arguments from the base class declarations, and when the virtual function call is made, the default arguments are decided based on the static type of the object.

In the context of the codebase I’m working on today, this translates to

Do not provide default arguments in the declaration of abstract virtual functions.

My Painting

About Me -

I am Utkarsh Kumar, currently pursuing a Bachelor of Technology (B.Tech) degree in Industries Management from the esteemed IIT Kharagpur. I am currently in my third year of study. I am pleased to announce that I have been selected for the Properties Managment Digikam Google Summer of Code program this year. During the program, my focus will be on enhancing the properties management of Digikam.

Digikam Poperties Managment

Currently, users are endeavoring to modify images with a single click, such as altering image tags, author names, and the body text associated with the images. Consequently, I am actively engaged in devising a solution to address this issue. Primarily, my workflow revolves around the properties management of Digikam.

What it’s all about

The majority of the images contain Exif data. In order to handle these images, it is necessary to extract all the metadata and store them in CSV files. To achieve this, a Python script is utilized to efficiently store a substantial amount of image metadata. Following this step, a command is executed to enable batch editing of the metadata, allowing for simultaneous modification of multiple images' metadata.

Digikam is an exceptional application that offers a multitude of advanced features, particularly in the realm of image editing. At present, my primary focus lies in exploring avenues to further enhance its capabilities, aiming to elevate the application to new levels of excellence.

The IMAGE EDITOR

Image editing preview Images have metadata:

#_exif_ifd_pointer #Tags #Artist #color_space #body_serial_num

W1

Adding custom tagsThe editing and modification of image metadata are of paramount importance, with the objective of accommodating user requirements effectively. The primary aim is to ensure a user-friendly experience, enabling users to effortlessly navigate through the process without encountering any challenges or obstacles.

POST1 END

My Painting

About This Properties -

In this section, my objective is to explore the method of consolidating all tags into a unified list, which I refer to as “Autotags.” This feature will enable users to conveniently apply tags to multiple images with a single click. my focus will be on enhancing the properties management of Digikam.

Digikam Poperties Managment

Currently, users are endeavoring to modify images with a single click, such as altering image tags, author names, and the body text associated with the images. Consequently, I am actively engaged in devising a solution to address this issue. Primarily, my workflow revolves around the properties management of Digikam.

What it’s all about

The majority of the images contain Exif data. In order to handle these images, it is necessary to extract all the metadata and store them in CSV files. To achieve this, a Python script is utilized to efficiently store a substantial amount of image metadata. Following this step, a command is executed to enable batch editing of the metadata, allowing for simultaneous modification of multiple images' metadata.

Digikam is an exceptional application that offers a multitude of advanced features, particularly in the realm of image editing. At present, my primary focus lies in exploring avenues to further enhance its capabilities, aiming to elevate the application to new levels of excellence.

The IMAGE EDITOR

Image editing preview Images have metadata:

#_exif_ifd_pointer #Tags #Artist #color_space #body_serial_num

W1

Adding custom tagsThe editing and modification of image metadata are of paramount importance, with the objective of accommodating user requirements effectively. The primary aim is to ensure a user-friendly experience, enabling users to effortlessly navigate through the process without encountering any challenges or obstacles.

POST1 END

Because you asked for it, here a surprise video by Ramon Miranda introducing gradient brushes:

 

The post Surprise New Video by Ramon: Gradient Brushes appeared first on Krita.

Tuesday, 30 May 2023

I can’t believe it’s already the end of May! This month turned out a little meatier than last month I think, but I still have a large backlog of merge requests and TODOs to go through.

Plasma #

Now when there isn’t enough space to display the QR code in the clipboard applet, there is a clearer message of what to do next.

Screenshot of the new message in action.
Screenshot of the new message in action.

On the topic of QR codes, the menu is now a menu of radio buttons and not checkboxes which didn’t make sense because it’s an exclusive option.

You can&rsquo;t have two different codes being displayed after all.
You can’t have two different codes being displayed after all.

There is now a separator above the “Close” action in the window menu!

It now matches other context menus with this action, e.g. the Task Manager
It now matches other context menus with this action, e.g. the Task Manager

I added a metadata extractor for Krita files, which means certain information about your Krita artwork can show up in Dolphin, Baloo and other programs that can take advantage of it! This includes helpful information such as canvas width, height and creation date.

A slightly outdated screenshot, but showing off some of the metadata it can extract
A slightly outdated screenshot, but showing off some of the metadata it can extract

Soon, the Language and Region settings will support the $LANGUAGE environment variable. This only affects users who did not configure the language explicitly from KDE, like those coming from another computing environment. We already supported loading your pre-existing language from $LANG. Included in that merge request is a fix that stops an erroneous warning message telling you that your language isn’t supported, even though it clearly is.

Plasma SDK #

For new users of the Plasma SDK, there is now a clearer and more helpful message when you start plasmoidviewer without an applet specified.

$ plasmoidviewer
An applet name or path must be specified, e.g. --applet org.kde.plasma.analogclock

I proposed making the icon name selectable, because I can’t stop myself from clicking on it!

Screenshot of selecting the icon name in Cuttlefish.
Screenshot of selecting the icon name in Cuttlefish.

Gamepad KCM #

Jeremy Whiting has been hard at work improving the backend code, and I finally took a shot at creating a proper art prototype of the controller that will be featured in the KCM.

Concept art of the controller, not finalized yet.
Concept art of the controller, not finalized yet.

This will be the base image for the different controller types, and it will change depending on what controller we detect. Neither of us are experts in Inkscape, so we plan for the this to be easily tweakable by actual designers who do not need to know the fine details of the KCM. This is possible because we’re also developing an Inkscape extension to automate exporting SVG files into QML templates that describe button, trigger positions and so on.

The concept is already working in the KCM, but it looks a little off right now and isn’t ready for showcasing yet :-)

Tokodon #

Many users (including myself) have been experiencing crashes because of the video support added in the last release. QtMultimedia - the library we used for video support - in Qt5 is frustratingly buggy, but has improved in Qt6. Unfortunately, we still have a few more months before KDE Gear applications like Tokodon can switch to Qt6 only and we need a solution for the crashes now. I started porting Tokodon’s video support to mpv which is also used in PlasmaTube!

Playing videos and GIFs should be less crashy, but with worse scrolling performance. However, I worked hard to make sure this only affects auto-play, so if you don’t that option enabled then you shouldn’t notice a difference. This change is almost ready and should appear in the next release, but it lacks testing on Android.

You can now change certain account preferences, but the selection is limited due to lack of a proper API. These are preferences that were supported before, but now you can change them from within Tokodon.

The preferences you can tweak in Tokodon
The preferences you can tweak in Tokodon

And a whole slew of smaller stuff, some which are appearing in the next bugfix release:

Tokodon on GNOME!
Tokodon on GNOME!

For the current and future contributors, I started working on better and more detailed documentation. The first two areas I covered was timeline models and the account classes!

In terms of starting even more future work, I started implementing QtKeychain support, and rewriting the current, and buggy, account saving mechanism with KConfig. This will hopefully land in the next release, and fix a whole slew of nagging security and account duplication bugs.

qqc2-desktop-style #

If you’ve been noticing that qqc2-desktop-style on Plasma 6 is spitting out some weird stuff in your logs:

Warning: file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33:13: Unable to assign [undefined] to bool (file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33, )
Warning: file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33:13: Unable to assign [undefined] to bool (file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33, )
Warning: file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33:13: Unable to assign [undefined] to bool (file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33, )
Warning: file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33:13: Unable to assign [undefined] to bool (file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33, )

I fixed that! It also needs these ECM changes to work. It turns out ECMQmlModule didn’t handle singleton types, and other nagging problems that qqc2-desktop-style needed. I’ve been dabbling in this module for the past month or so so it’s exciting to be able to help here.

Kiten #

I took some time to improve the codebase of our Japanese reference tool Kiten, because it seems to have not been very active the past few years. I think it was written before we used C++11. I found a bunch of places where 0 was used to set pointers to null!

I started replacing the old foreach macro, use auto to prevent duplicate types and other modern C++ gardening tasks.

Websites and Documentation #

The go.kde.org Matrix redirector update is now merged, which I started in February. This means NeoChat is now preferred right below Element Web (which is still pointed towards https://webchat.kde.org/). Thanks to Thiago Sueto, the Community Wiki has been updated already and I sent two merge requests to update kde.org and the footer.

The updated matrix.to redirector!
The updated matrix.to redirector!

To finish off more February work, I got around to working on the two big pieces of API documentation improvements for KDE Frameworks 6. If you don’t remember, I wanted to add import statements for components meant to be used in Qt Quick. Doxygen already gives us hints for C++ headers, so QML users shouldn’t be left in the dust. For example, how are you even supposed to use this component?

This is a real example. Not all components are like this, fortunately.
This is a real example. Not all components are like this, fortunately.

In order to accomplish this, subclasses of QQuickItem need to have their doc comments modified. The first library to get this treatment is plasma-framework, see the merge requests for PlasmaCore, PlasmaQuick and hiding ToolTipDialog.

For regular QML-based components, doxyqml (the tool to auto-generate QML documentation, because Doxygen lacks support for the language) needed to spit these out too. The merge request to add import statements is cleaned up, the tests fixed and ready for final review!

Ah! I had to import that module!
Ah! I had to import that module!

I also spent some time cleaning up the Community wiki, which just means I roam around and make sure links aren’t dead and the formatting looks nice. If you’re interested in some wiki improvement, join us in #kde-www and the Issue board!

Packaging #

I was recently researching how well Tokodon works out of the box on other desktop environments. It turns out 90% of issues with Kirigami applications can be solved by installing breeze-icons and qqc2-desktop-style! We might be enforcing this soon, so if you are in charge of packaging Kirigami applications, please make add them as weak or required dependencies! I will probably start filing packaging bugs soon.

In terms of KDE packaging issues in distributions, I opened up two this month:

Akademy 2023 #

I’m also attending Akademy this year in Thessaloniki! My passport was delivered this month, which is strangely hard to get in the USA (currently).

I finally got the passport today! Pretty happy that I no longer have to worry about this little book :bunhdgoogly:

Image 110391767845930597 from toot 110391772254719472 on mastodon.art

I booked my accommodations last week, so I’m excited to see everyone in-person in July! This is my first time traveling outside of the North American continent, and to Europe no less. I’ll be documenting my experience traveling and at Akademy, but I’m not sure what format it’ll be in yet.

Monday, 29 May 2023

Not a moment after I had walked out the door to catch a train to Berlin for the KDE e.V. board sprint (May 2023), there was a local power failure which took down my in-house IT. That wouldn’t be so bad, except it did not come back up. Cue gnashing of teeth from the people who stayed at home (but, really, should have been able to hack into the router to fix it).

What Went Wrong

  • The Pine H6 which provides DNS and DHCP to the house, did not come up. I’ve seen it before – a power droop leaves the eMMC discombobulated, and no amount of cajoling will get it back unless you pick the eMMC off the board and futz with it in a different machine.
  • The modem relies on the Pine H6 and does not provide fallback of its own (which would have allowed easy configuration of static IP and DNS, anyway).
  • My workstation, which I thought was configured with static IP, was set to DHCP instead, so it didn’t get an address at all.

Fixing fallback DNS and my workstation IP was simple.

Fixing the H6 was slightly more involved.

Why Was eMMC Involved At All

Originally the H6 also ran QuasselCore and some other services. These write to disk and are persistent. I had had bad experiences with write endurance of micro-SD cards. As in, they’re lousy in write-intensive scenarios and wear out quickly.

I figured eMMC such as used in the PineBook would be a better candidate for writable storage.

Since originally setting this up, I have stopped using QuasselCore. So the write-intensive and potentially large data-storage needs are gone. But the eMMC configuration lives on in my H6, which is disastrous when a power droop leaves it discombobulated.

Fixing The eMMC

On boot in FreeBSD I kept getting controller timeouts and device-read timeouts on the eMMC block device. The filesystem would not mount, and I would eventually get dropped down to single-user mode. Unfortunately, in single-user mode, you need to use the serial console to talk to the board (if I expect people at home to hack the router, maybe I should expect them to deal with serial ports too).

I am, frankly, not sure what I did right. I picked the eMMC off the H6, stuck it to an adapter which I had just received with the VisionFive V2, and dd‘ed the whole device to /dev/null. Since it did not throw any read errors or timeouts, I put it back on the H6 and wished for good luck.

Note to self: on the Pine H6, the EXP connector has pin 6 = GND, 7 = TX (goes to RX on the USB-to-serial), 8 = RX. Those are the easiest to count-out pins. Also, they’re bent on my board from all the connecting-and-disconnecting I do.

Making The eMMC Unnecessary

Originally I added the eMMC for write-intensive large data sets, but those have gone away on this machine. So what’s left? Maybe 64MB of data that gets written or updated – the DNS log, DHCP leases, maybe a cache. But none of that is very big, and none of it needs to be persistent across (rare!) reboots. All the writable data on the system lives in /var.

FreeBSD supports a variety of diskless operation modes, so I went looking what is possible there. Turns out /var on diskless systems can be treated specially, and that is just what I need.

In rc.conf there are dozens of system-configuration variables that you can set. It’s still old-school SysV initialization, and I like it like that. Here is what I added to /etc/rc.conf:

varmfs=YES
varsize=256M
varmfs_flags='-S -k /var.md/'

The configuration says to use a memory-disk for /var, that it should be 256MiB large (plenty, and still acceptable within the 3GiB memory size of the H6), without softupdates (a BSD UFS tweak) and using /var.md as “skeleton”. That means that the memory disk is populated from the contents of /var.md when it is created.

With this setup, I have writable storage that is not persistent and that does not wear our the SD card, with minimal impact on the rest of the system – and it is simple to switch back if necessary.