Contact us, give us your ideas, explain us where we can improve...
Can you design good interfaces ? Can you code ? Have webmaster skills ? Are you a billionaire looking for a worthy investment ? We will be very pleased in welcoming you in the skrooge team, contact us !
This is part three of a series of posts describing a potential new API for dealing with countries, country subdivisions
and timezones in KI18n, following the previous one country to timezone mapping,
covering how we can query the timezone and country or country subdivision information by geographic coordinates.
The API for this is fairly straightforward, pass a geographic coordinate in, and get the respective feature at that location back:
The source data however is huge and slow to process, we need to convert that into a compact form allowing efficient
storage. For this we reuse prior work from KItinerary
which contains a z-order curve based coordinate to timezone index.
There’s a few improvements and extensions over the original code though. Most notably we can now represent multiple
features per location, while using the fact that there is only a small set of feature combinations actually occurring.
This allows us to look up not only timezones but also the country or the country subdivision by location, without
significantly increasing the needed storage size.
The QGIS Python script doing the processing also
got optimized a lot, the original version from KItinerary needed about eight hours, the new one only needs about 15 minutes
while producing a more detailed result. This makes it much more feasible to experiment with tweaking the various parameters
to get to optimal results.
Choosing Parameters and Conflict Resolution
Obviously we can’t just magically reduce the hundreds of megabytes of source data by two orders of magnitudes without trading in
spatial resolution, how much depends on the parameters of the index generation script.
There’s three values to keep an eye on:
For how much of the earth’s surface do we return a result?
For how much of the earth’s surface do we return the wrong result?
The size of the index data.
To understand how we can influence those it’s useful to have a quick look at what the index generation does conceptually.
Split the earth’s surface in rectangular tiles (currently: 2¹¹ x 2¹¹). Cut off uninhabited polar regions to
have more tiles for inhabited areas (currently: 80°N and 60°S). For our current parameters that results in tiles roughly 10x20 km
at the equator, and increasingly smaller towards the poles. This controls how much surface area we can cover, and how large
features have to be in order to be visible at all.
For each tile, check which of the features in that tile actually conflict. For example a tile overlapping the French/German border
would see two timezones Europe/Berlin and Europe/Paris. Those two are (at least for the present and near future) equivalent,
so we just pick one of those and don’t have an actual conflict. For the country we obviously can’t do that, so there we wont be
able to return a result.
For each feature conflict, discard those features that only cover a small fraction of the tile (currently: 2%). This trades
correctness within a few hundred meters of a border for a larger coverage area.
With the above mentioned parameters, we get to an index size of about 950kB, and cover 99% of the non-polar regions
for timezones and countries, as well as 98% for (first level) country subdivisions, and we shouldn’t get wrong results when being away
at least 300 meters from a border.
This is a decent trade-off for many use-cases, further reducing the tile size results in a rapidly growing index size for a decreasing
win in precision.
There are ways to break this of course, land-locked and shaped against the tile orientation mini-countries such as
Lichtenstein can fall through the cracks entirely, even more so their subdivisions. Similarly, very fine-grained country subdivisions can
also be missed, but in those locations we tend to at least get a correct country information.
There’s two more remaining aspects to be sorted out now:
Human readable and translated timezones names. Unlike with countries there is no canonical form for this,
applications tend to use different approaches to represent timezones. It’s still unclear which building
blocks for this can be offered by KI18n.
Looking up the language of a country or country subdivision, as well as human readable and translated language names.
This needs a bit more thought as well, as code referring to languages often rather expects locales (area and/or script
variants used in a specific area), as well as the available translation catalogs on the system.
This week I have two particularly large things to present! Not Steam Deck levels of large, but still pretty cool, I think.
First of all, David Redondo and Kai Uwe Broulik implemented the power profiles feature! This allows you to specify how your computer should balance energy use against performance. You can switch modes at any time using the Battery and Brightness applet, and you can configure which profile gets used automatically when plugging or unplugging the power cord. The feature will be available in Plasma 5.23 with a newer computer that supports it when using Linux Kernel 5.12 or greater.
Next, the new Kickoff launcher menu that was introduced in Plasma 5.20 has received a gigantic code overhaul which fixes many bugs, improves performance and accessibility, tightens up the user interface, and adds a few commonly requested features. Among the fixes:
Keep in mind that this blog only covers the tip of the iceberg! Tons of KDE apps whose development I don’t have time to follow aren’t represented here, and I also don’t mention backend refactoring, improved test coverage, and other changes that are generally not user-facing. If you’re hungry for more, check out https://planet.kde.org/, where you can find blog posts by other KDE contributors detailing the work they’re doing.
How You Can Help
Have a look at https://community.kde.org/Get_Involved to discover 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!
Tags: tech, history, spreadsheets, quality, knowledge, data, data-science, health
It’s a very nice paper on spreadsheets and how we use them. It got enough history in it to make me tick (goes back all the way to the 1300s!). Also it’s well balanced, it’s not just about blindly blaming tools but looks at their shortcomings but also how we often use the wrong tool for the task… and then end up managing data and knowledge really badly.
The Steam Deck is going to use KDE Plasma as a desktop. Since I happen to know how Plasma works, I thought I'd do a video explaining its main features for the new people who would discover Plasma with it.
If you want to help me make these videos:
My website is https://niccolo.venerandi.com and if you want to contact me, my telegram handle is [at] veggero.
Background music by:
After The Fall - https://www.youtube.com/channel/UCGQErWWbH15OMutnpM2vW7w
I had a look at a small XmlListModel based project of mine and started migrating the code from Qt 5.12 to Qt 6.2. The code ports pretty cleanly, but there are some caveats to be aware of.
As I’m lazy, I started by changing the imports from 2.12 to 6.2 and tried running the code. The first changes I had to make was to change the import from QtQuick.XmlListModel to QtQml.XmlListModel. I also learned that the import statement no longer requires a specific version to be specified – I’m not sure if I’m a fan of that quite yet.
The second change was that XmlRole has been renamed to XmlListModelRole, and that it no longer has a query property, but an elementName and attributeName property. I guess that saves Qt from having to implement support for XPath queries, and in my use-case (and most others), this should still be enough.
The last change I had to made was to silence a warning. It is no longer encouraged to connect objects directly to signals in QML. In my case, it was animations triggered by the onAdd and onRemove signals in a model. The trick is to declare the animation (in my case, a pair of SequentialAnimation instances, separately. Provide an id for them, and then call start on that id in the signal handler.
All in all, a quite pleasant migration experience with only superficial API changes to handle. All logic could be used as is. Nice!
**Note: This is a preview of the post for automatic RSS parsers, it is
currently under testing and does not represent the format and the
structure of the actual blog post. Please use the title hyperlink to
access the post itself!**
Google Summer of Code 2021 with KDE, how it started and what we aim to achieve.
Blog at last + How it started
Ah yes! The blog is working at last! I suppose that this is my first Google Summer of Code blog literally a month after GSoC started (though I did have final exams for the first week so I suppose that could slide?), though I promise that I have been working on the project just fine throughout the past month. To learn more about how I dug my blog setup into a semi-pit and then back out with its slightly unusual structure and deployment, please visit the about section!
Back in mid-March, the winter quarter had just ended, and I decided to start doubling down on my top choices for Google Summer of Code 2021 and start digging deeper into the sub-groups of the organizations. But I ended up spending 4 to 5 days (and technically many months of usage after that) getting Arch Linux properly set up on my computer that took a good 3 minutes just to POST (but booting from disk afterward is pretty quick though). It took me not too long to realize that the remaining time left was not enough to explore multiple organizations, so I quickly doubled down on KDE.
My initial thoughts were to do something along the lines of accessibility, however, after seemingly finding no mentors who could easily support me on such a customized project, I stumbled across the pre-defined project of the KDE Connect app for iOS, and somehow managed to get in contact with the mentors, look over the codebase, submit a merge request, and finished the entire proposal in a couple of days (?)
The fix we found consisted of something along the lines of calling the same function twice somehow??
But this existing codebase was something special. Since it was introduced by a GSoC 2014 project, it went many years without any commits until 2019 when Inoki, one of my current mentors, took maintenance of the project and started examining it again while adding changes here and there along the way.
Surprisingly, I was able to get the mostly 7-years old project built on my machine running the latest macOS and Xcode, albeit with a bit of cocoapods fiddling. Upon opening the app on my iPhone 7 Plus, I immediately felt like it was 2013 again with the iOS 8-9 aesthetics and the fact that the app looks like it was simply ballooned up from an iPhone 5s display into the larger one of the 7 Plus (and I can only imagine what it would look like on today's taller iPhone-X era displays). Immediately, it was clear that the UI of the app would benefit greatly from a complete overhaul, preferably using the newest framework, SwiftUI, to put the project on a solid footing for future contributions.
Lots of things have changed in iOS since 2014. But the most relevant regarding KDE Connect is perhaps the fact that some of the features and system APIs needed to implement KE Connect’s functionalities that were previously absent in 2014 (such as an official file browser/user-facing file system) have been added to iOS and usable by apps throughout the years, which should make things easier. It would no doubt still take a fair amount of time to figure out all the protocols and get all the features implemented, very possibly beyond the period of this GSoC project, but the project aims to nonetheless set a solid foundation for further work to be done.
Aside from using system APIs, another major goal is to rewrite the LAN network communications backend written in objective-C with the current Swift Network framework. Aside from seemingly strange behaviours and a noticeable high power-drain/processor usage, the app also makes use of the continuously copying from the system clipboard to pass information around, which continuously triggers the clipboard access alert on iOS 14. Therefore, a sizable rewrite is needed to make sure that things function more optimally going forward.
All in all, these are the primary goals that the GSoC project aims to accomplish. There will soon be more posts following up on these topics, such as UI/UX testing with the UI rewrite and LAN testing with the backend rewrite, stay tuned!
The Plasma Mobile team is happy to present the Plasma Mobile updates for July 2021. Read on to found out about all the new stuff included in this release:
First and foremost: Marco Martin made the shell more responsive by improving the performance of the top panel.
We have solved some issues regarding international numbers: When dealing with numbers saved without a country code, we used to need to guess what country the number was from. Previously, we had to do this based on the locale settings, but now we also take into account which country the phone is based in and take information from the cell towers.
We also fixed an issue that could result in the dialer showing the wrong contact name when receiving a call, and now you can also use the dialer correctly with a hardware keyboard.
Thanks to Smitty van Bodegom and Jonah Brüchert, Plasma Mobile’s SMS app gained several UI improvements. For one, errors while sending messages are properly reported, and it also shows you which number you are sending SMS from. Another improvement is that chats are now ordered properly.
Han Young overhauled the KWeather plasmoid. Not only did he fix some annoying issues, but the corrections allow you to select separate locations. The corrections in the plasmoid have also removed the same issues in the app.
As for KWeather’s look, Devin worked on giving the dialogs in the app a consistent style, as well as a new inline page indicator for flat mode.
Han Young’s worked on ensuring that receiving alarms when the phone is suspended works in all cases; and Devin made sure that a proper theme is applied at all times, especially when using KClock on non-Plasma systems. He also changed the dialog style to look more consistent with other native dialogs.
Talking of which, KRecorder received the same theme fixes applied to KClock, so it also now looks consistent across platforms.
Qrca, Plasma Mobile’s QR reader, now allows you to choose between multiple available cameras for scanning barcodes. It also offers to import barcodes for transport tickets into KDE Itinerary, and provides helpful links for barcodes containing International Article Numbers or ISBNs.
We also improved the user interface. The Share dialog now handles errors, sends a notification with the shared destination URL for services like Imgur, has a loading indicator and a title. As for the camera selection dialog on the desktop, it won’t fill the entire width anymore.
Dimitris Kardarakos made sure that the phone no longer pointlessly wakes up at midnight and added some UI improvements.
It’s been quite a busy month for Kasts development. The main features implemented into Plasma Mobile’s podcasting app this month include:
Bart added a feature to resume podcast episode downloads. The Download page has been adapted to show downloading, partially downloaded and completed download categories.
Swapnil reworked the playback speed settings. Clicking the speed button will now open an overlay list. This list now includes slower playback speeds.
Bart added a button to the error notification. This allows you to directly open the list of errors. This error list can also be opened from the Settings page (previously this was a tab on the Downloads page).
On systems running NetworkManager, Kasts can now check whether a metered connection is in use (e.g. an LTE connection on the PinePhone). Bart has introduced new settings to allow/disallow checking for podcast updates, downloading episodes or downloading images on such connections.
Swapnil added highlighting to the currently selected page in the main menu. This should make it easier to navigate.
Bart added new settings to determine what happens when episodes are marked as played: episodes can be deleted immediately or next time Kasts starts.
Swapnil added several tooltips. He also added hotkeys: space will play/pause playback and n will skip to the next track.
Additionally, Bart fixed several bugs. Most notably:
Inhibit suspend on GNOME and Phosh has been fixed.
The implementation to restore the playback position of episodes has been improved. There should be no more audible glitches when starting up the app.
In Other News…
The Plasma Mobile sound contest has now concluded. You can find out more here. A big thank you to all participants! We will be including the sounds in future releases of Plasma Mobile.
Want to help with the development of Plasma Mobile?
Meta: The first thing I have to announce is, that I'm tired of trying to come up with a cool name for every blog post. I'll just use This Week In Tok from now on.
Secret (E2EE) Chats
Tok now supports secret chats, which are indicated in the chat list using a lock icon. Secret chats are Telegram's E2EE solution, and since the clients (like Tok) are open source and the algorithim well-documented, you can easily verify the implementation for yourself. Wish I could say the same for some other E2EE chats.
Color Scheme Persistence
Tok now remembers which colour scheme you picked between restarts.
New Desktop Settings
Tok now has a revamped settings dialogue more in line with other KDE apps on desktop.
New Mobile Settings
Tok now has new dedicated mobile settings that offer a touch-friendly interface.
Tok now allows you to create chats of all kinds: one-on-one private chats, secret chats, private groups, public groups, and channels.
You can now disable notifications globally in Tok quickly and easily and enable them just as easily.
Messages with images are now much less jumpy than they were before.
Images also now show a blurry thumbnail while loading.
Tok now offers the ability to minimize to the system tray on desktop systems, where you can still receive notifications without a visible Tok window and disable/enable them from the tray directly.
Let's welcome Latte Dock v0.9.98 the Second Beta of v0.10.x branch!
A new beta was needed because some core parts were updated such as Last Active Window implementation (L.A.W.) . LAW is responsible to track windows per panel/dock level and provide these information to latte centric applets such as appmenu, title, buttons etc. Through LAW, Latte is possible to provide information for windows on inactive VDs/Activities/Screens. By reimplementing some of its parts the multi-screen users that use appmenus/titles/buttons applets in different screens should now get one of the best experiences. You can check how this fix was tracked down from: https://github.com/psifidotos/applet-window-appmenu/issues/172