Feeds

ItsMyCode: Python String swapcase()

Planet Python - Sat, 2022-01-08 06:50

ItsMyCode |

Python string swapcase() method is a built-in function that converts all uppercase characters into lowercase and all lowercase characters into uppercase characters of a given string and returns a new string.

swapcase() Syntax

The Syntax of swapcase() method is:

string.swapcase() swapcase() Parameters

The swapcase() method doesn’t take any parameters.

swapcase() Return Value

The swapcase() method returns a copy of the string where all the uppercase characters are converted into lowercase characters and vice-versa.

In case the string has other than alphabets those characters will not be converted and returned as-is.

Example: Python Program to change the case of a given string text1 = "pYTHON tUTORIALS" print(text1.swapcase()) text2 = "HELLO WORLD" print(text2.swapcase()) text3 = "welcome to itsmycode" print(text3.swapcase()) text4 ="12345!!!" print(text4.swapcase())

Output

Python Tutorials hello world WELCOME TO ITSMYCODE 12345!!! Note: If you want to convert given string into lowercase only it is recommended to use lower() method. Likewise, if you want to convert given string into uppercase only it is recommended to use upper() method.

The post Python String swapcase() appeared first on ItsMyCode.

Categories: FLOSS Project Planets

KDE Developer Contributes To GNOME!?

Planet KDE - Sat, 2022-01-08 05:51
💸💸 Help me contribute to KDE and do these videos: 💸💸 Patreon: https://www.patreon.com/niccolove Youtube: https://www.youtube.com/channel/UCONH73CdRXUjlh3-DdLGCPw/join Paypal: https://paypal.me/niccolove Stay in the loop: https://t.me/veggeroblog My website is https://niccolo.venerandi.com and if you want to contact me, my telegram handle is [at] veggero.
Categories: FLOSS Project Planets

November/December in KDE PIM

Planet KDE - Sat, 2022-01-08 04:45

Since the last summary two month ago we have seen the 21.12 feature releases of Kontact, and more than 1800 changes by 35 contributors have been integrated. While a large focus remains on preparing for a smooth transition to Qt 6 and KDE Frameworks 6, there have been many other additions and improvements to the PIM applications as well.

Calendaring Kalendar

Kalendar 0.4 was released and contains a new one-day and three-days view. It’s now also possible to drag and drop events to change their collection. Aside from that, a lot of focus has been put on performance, bug fixing and small quality of life improvements for this release.

See the full release notes for more details.

See also [this video](https://claudiocambra.com/wp-content/uploads/2021/12/simplescreenrecorder-2021-12-03_17.32.38.mp4). KOrganizer
  • Fixed misaligned layout of header and footer columns in the agenda view (MR).
  • Fixed misalignment of all-day view and day headers without scrollbar in the agenda view (MR).
KOrganizer agenda view header/footer decorations. Calendar Reminder Daemon

A common reminder daemon for both KOrganizer and Kalendar is in development with the goal to replace application specific solutions eventually. It’s entirely based on system notifications as its UI, which provides a lot of ways for customization out of the box and is less intrusive than e.g. KOrganizer’s current reminder dialog.

A new and particularly handy feature are context-specific actions for reminders, such as directly opening/joining an online meeting.

The final piece yet to be implemented is selecting the corresponding event in the preferred calendaring application.

Reminder notification for an online meeting with a corresponding context action. Kleopatra
  • Allow export and import of certificate groups (T5638).
  • Support external certificate lookup and import via WKD (additionally to keyserver lookup/import) (T5334).
  • Prefill external certificate lookup with local filter text (T5624).
  • Fix crashes or hangs on circular S/MIME certificate chains (T5697).
KMail
  • Fix sorting in the recently used emoji page.
  • Add support for the important/unread status of emails in the deletion confirmation plugin.
  • Fix folder history.
  • Improve test coverage for composing encrypted and signed message with and without Autocrypt.
Kontact
  • Fixed many dialogs having buttons with “Yes”/”No” texts to instead use action verbs.
  • Fix plugin handling for the summary page.
Data import/export
  • Fix import and export of settings for the unified mail box.
  • Fix handling of SMTP settings.
  • Add support for importing/exporting DAV settings.
KAlarm
  • Show all numbers and times in localized form.
  • Fix bugs if a KAlarm command line action is attempted while KAlarm is already running (bug 446740):
    • ensure that that the command is executed;
    • don’t disable alarms after executing the command;
    • don’t quit the running instance if the command has bad options.
  • Handle empty or invalid calendar files so that they don’t prevent KAlarm initializing properly.
  • Fix crash when a resource is removed.
Itinerary

A lot has happened around KDE Itinerary and its KMail plugin as well, as you’ll find in its dedicated summary blog post.

Help us make Kontact even better!

Take a look at some of the junior jobs that we have! They are simple, mostly programming tasks that don’t require any deep knowledge or understanding of Kontact, so anyone can work on them. Feel free to pick any task from the list and reach out to us! We’ll be happy to guide you and answer all your questions. Read more here…

Categories: FLOSS Project Planets

Christmas 2021 …

Planet KDE - Sat, 2022-01-08 03:12

… is already a few days ago and I finally come around to share one of my gifts with the KDE community.

After 7 years I replaced (actually had to replace) my old mobile with a new one. The new one however has a camera that sticks out of the back of the mobile for a few millimeters which I don’t like. My daughter designed a custom cover for my wife’s phone a while back, and I asked her, if she can design something for me. Here’s what she created:

Licensed under Creative Commons License SA 4.0.

Now I have to see how I can contribute to the pun.

The original artwork is made by Tyson Tan under Creative Commons License SA 4.0 and taken unchanged from the KDE promo material page

Categories: FLOSS Project Planets

OpenSense Labs: Drupal in 2021: Year in review

Planet Drupal - Sat, 2022-01-08 03:07
Drupal in 2021: Year in review Shankar Sat, 01/08/2022 - 13:37

Perceptions can change the way you go about doing anything you may want. “New year brings with it new beginnings”, one may perceive. “New year poses similar changes and nothing has changed but the date”, another may shout out. Nevertheless, the new year has already begun and that feeling of do-great-be-great this year in anything we set out to do is also palpable (initially at least, before it fades away in the midst of all that keeps us busy the year round.) Anyway, 2022 is here and it’s time to wrap up the important changes or the events that happened in the Drupal ecosystem in 2021.

Celebrating two decades of Drupal!

The celebrations did not stop ever since the launch of Drupal 9 in 2020 (Well, the vibrant Drupal community members never stop celebrating Drupal and always find a reason to celebrate.)


2021 marked the 20th anniversary of Drupal. Two decades of existence and still counting! It was a reason big enough to rejoice. Drupal is one of those few open source softwares that is brimming with active, growing community and its community members’ inclination towards innovation has kept the CMS relevant even in the midst of modern day technologies. Read web development trends in 2021 and macro trends in 2021 and how Drupal keeps up with them.

Yet another year of virtual, global community events!


The Drupal Association launched DrupalFest 2021, a global community event held virtually, to kick off the celebrations and expand on the theme #CelebrateDrupal for the entire month of April (Check out CelebrateDrupal.org). The event was a success with over 48 events taking place in 19 nations and 7 different languages for the month-long celebration of Drupal contribution, community and the positive impacts Drupal has made possible.

Moreover, despite the ongoing hurdles posed by the Covid-19 pandemic, the Drupal Community remained connected virtually through its all-important annual events - DrupalCon North America 2021 in April and DrupalCon Europe 2021 in October. Both the events were a grand success with a record 2300+ participants and 900+ participants respectively.

Source: Drupal Association


And, to provide guidance and accountability for addressing the accessibility of events with utmost respect, sheer professionalism and absolute grace, the Drupal Event Accessibility Playbook was announced this year by the Drupal Event Organizers Working Group and Drupal Community Working Group. The objective was to help make inclusivity simpler to build into event planning.

The state of Drupal project pipeline

Drupal adoption rate saw a palpable growth in 2020-2021.

Drupal core usage statistics | Source: Drupal.org


2021 also marked the timely releases of minor version releases of Drupal 9. Drupal 9.2 and Drupal 9.3 releases brought with them further enhancements to Drupal 9.


Drupal 9.2 ensured to keep your site even more safer and secure, gave better visitor privacy protection, had improved migration tools from Drupal 7, arrived with an improved Olivero frontend theme and provided early support for the WebP image format.

Drupal 9.3 teased with an experimental module for CKEditor 5 in core, had an even more stable Olivero ensuring a fresh, modern and highly accessible frontend theme for Drupal out of the box, and had several improvements done on the content editor’s and developer’s front.

First released on November 9, 2015, Drupal core version 8 series reached its end of life on November 2, 2021. The last version was released on November 17, 2021. So, all the releases of Drupal 8 core and Drupal contributed project releases that were compatible with only Drupal 8 were marked unsupported as they did not have any further security team support. Reads all your burning questions around Drupal 8 end of life and a comprehensive report on it to know more.


On the other hand, Drupal 9 adoption kept on happening at a staggering pace reaching 0 to 60000 websites within a month. The same took seven months for Drupal 7 and three months for Drupal 8!

Source: Dries Buytaert's blog


The year also saw a rapid adoption and development happening in the Drupal 9 ecosystem as almost 88% of the top 1000 Drupal modules were fully compatible with Drupal 9 in a quick span of time. In contrast, only one-third of the top 50 Drupal modules were compatible with Drupal 8 after about one and a half years.

Source: The Drop Is Always Moving | Twitter


With Drupal 9 all set for more feature upgrades and Drupal 10 release around the corner in 2022, several initiatives were launched for further enhancements. Impressive progress was made on these key initiatives:

a) Project browser

To help more evaluators and site builders fall in love with Drupal, Project browser initiative was launched. This would streamline the process of finding and installing modules for the site builders right from their Drupal site which is similar to, let’s say, Google play store or Apple app store on a smartphone.


b) Project messaging in core

This is to add a feed of announcements from Drupal.org directly to core and enable the communication channel to reach Drupal end users directly in their Drupal installation for the first time in Drupal’s history.

c) GitLab Acceleration

Dries Buytaert, founder and project lead of Drupal, announced the GitLab acceleration initiative for enabling Drupal.org’s migration to GitLab. This is because most open source communities today have made it a standard practice to use tools such as GitHub and GitLab. The contributors look forward to using either of those when contributing to open source. 


The objective here is simple. It’s to make it easier for people to become contributors after they adopt Drupal. Many developers outside the periphery of the Drupal community are used to leveraging GitLab and enabling them to use the tools they are already familiar with is a much needed step towards garnering new contributors.

Source: Dries Buytaert’s blog
d) New front-end theme (Olivero)

A lot has happened on Olivero, the new frontend theme. Drupal 9.2 and 9.3 were released with further enhancements to Olivero. Dries confirmed that the work on this is nearing its completion. Enormous work has gone into making Olivero fully accessible and making it WCAG AA conformant. The proof of it was the praises that National Federations of the Blind (USA) showered on it as they appreciated it for being “low-vision accessible”.

e) Decoupled Menus

With REST, JSON:API and GraphQL, Drupal has an amazing web services implementation available. The Decoupled Menus initiative came about with the objective of expanding the number of web service endpoints that Drupal provides and creating a huge bank of web components and JavaScript framework integrations.
 
Composable enterprise architecture or composability, a concept that strives to capture business and technical capabilities as APIs, seen as modular components across lines of business, is a growing trend today. Developing more web service endpoints and JavaScript components extends Drupal’s leadership in both headless development and composability and will make it one of the most-sought after tools for developers. The initiative has made fantastic progress. Take a look at how is it being worked upon:


f) Automatic Updates

The Automatic Updates initiative was brought forth to make it easier for updating Drupal sites safely and securely. The initiative has made amazing progress in 2021 and a working development version could be demonstrated as follows:


g) Drupal 10 readiness

The Drupal 10 readiness initiative was launched to ensure the release of Drupal 10 in 2022 providing enough time to update sites while keeping Drupal secure and updated. This initiative is focussed upon upgrading the third party components that Drupal depends upon. Plenty has happened and the initiative is right on track. The upgrade to Drupal 10 will be made easy. All thanks to proper management of deprecated code and continuous investment in Rector. Upgrading from Drupal 9 to 10 can be largely automated which is a 300% improvement in comparison to Drupal 8 to 9 migration.
 
As Drupal 9 was built in Drupal 8, similarly Drupal 10 is being built in Drupal 9 as much as possible. Exception being CKEditor 5 is being built as a contributed module for testing purposes and easier collaboration. Also, PHP 8 and Composer 2 support has been shipped to Drupal 10. Support for Symfony 5 looked good and that of Symfony 6 was in the works.

h) Easy out of the box

The goal of Easy out of the box initiative was to have Layout Builder, Media and Claro enabled by default for any Drupal user. Not much progress has been made on this yet and through Drupal 10 it is expected to take a U-turn.
 
Despite excellent progress that Drupal initiatives have made in 2021, The Drupal Business Survey 2021 stated that the many participants during the survey were particularly worried about Drupal’s popularity fading away in the coming year. Competition from cloud CMS platforms was said to be their biggest reason to be wary of.

Source: Drupal.org


When the survey looked at the factors influencing clients’ decisions to either go for Drupal or stay away from it, the facts were encouraging. The usual parameter of ‘having used Drupal before’ no longer arrived on to the scene as the number one reason for working with it. People are no longer just opting for Drupal out of habit and past experience. Being open source and a great fit for their business requirements at varying circumstances have proved to be important reasons for businesses to adopt.

Source: Drupal.org


The survey also found that since Drupal is on the higher end and more time-intensive during development, its price can be on the higher side as well when compared to competitors. Even the maintenance costs were said to be higher than competitors. Likes of WordPress and SaaS CMSes are being seen as a much more user-friendly option.

More on community initiatives and how strategic initiative take shape in Drupal here.

The state of Drupal contribution

Drupal.org’s contribution data for 2020-2021 showed that there have been fewer contributions and fewer contributors this time around.

Source: Dries Buytaert’s blog


But the important thing to notice here is that the top individual and organisational contributors aren’t leaving Drupal and only have become less active during the 2020-2021 period. A 7.7% annual attrition rate in the top 1000 contributors is very low and the average contributor in the top 1000 has been active for 13 years. Also, many Drupal agencies have contributed less but very few have completely stopped contributing altogether which means that top Drupal agencies remain committed to Drupal.

Source: Dries Buytaert’s blog


Covid-19 pandemic has definitely been one big factor making contribution more intricate and/or less desirable this year. In fact, a memorial wall called #Drupalmemorial was also initiated to encourage the community to share memories of lost friends and remember the good they brought in their lives. 

Dries terms this slow period as the Dupal Super Cycle. This is basically a period where after a major release, work shifts from active development to the maintenance stage. In other words, Drupal’s development cycle slips in and out of busy period and quiet period depending upon when the major version release happens.

Source: Dries Buytaert’s blog


Moreover, many Drupal agencies do not have enough time to contribute to Drupal because they are too busy growing, which is fantastic. And, because of Drupal stability and maturity, there are far fewer bugs to be fixed and features to be contributed. Rector automations have also been the cause of less contributions which is good.

Contributions to Drupal core witnessed a 7% year-over-year increase in credits while that of contributed projects like modules, themes and distributions saw a reduction compared to previous year.

Source: Dries Buytaert’s blog


Approximately two-thirds of all contributions were entirely sponsored. But, the volunteer contribution still remains very important to Drupal.

Furthermore, Drupal’s contribution recognition system is the first community that started allowing contributors of all kinds to attribute their work as a volunteer whether it’s on behalf of an employer or client organisation(s). Drupal.org also introduced the ability for contributors to choose what contributor roles they identify themselves fulfilling which can be local community leaders, event organisers or even project maintainers. Such data can be leveraged to understand the key contributor roles in the Drupal community and identify the diversity of individuals who hold these contributor roles. This will provide better analysis of the contribution ecosystem and help make better decisions on how to take the project forward. This system is now also the basis for a proposal to adopt a new metric by the Community Health Analytics Open Source Software (CHAOSS) community, IEEE and GitLab.

Amongst the traditional Drupal businesses, OpenSense Labs, which has been contributing frequently to Drupal and feels immense proud to be a part of one of the largest open source communities, featured in the list of go-to service providers for all things Drupal.

The Drupal Business Survey 2021 had interesting stats to show as well on how and why companies contribute to Drupal. It stated that all companies (80-85%) contribute documentation and code alterations and about 50% of them help to fund the community with donations and sponsoring events.

Source: Drupal.org


Read about the perks and approaches of contributing to open source to know more.

The state of Diversity, equity and inclusion in Drupal

Drupal Association launched a new initiative named Discover Drupal to provide more opportunities for people who have been underrepresented in the open source community.


Like every year, the Drupal Association logo was decorated with a little more colour in recognition of Pride month.


The Drupal community also addressed the negative behaviour that sometimes plagues the positive environment that everyone tries to create. This is because such behaviours can make it difficult or in fact uncomfortable for many to be in and hinder them from finding the right words to get conversations running in the healthy direction.

The Community Working Group (CWG) workshop held at DrupalCon Seattle 2019 paved the way for CWG Community Health team to come up with a communication initiative for the Drupal Community that comprises de-escalation templates called as Nudges.


What do the numbers say about the Drupal ecosystem’s diversity quotient? Well, over the years, Drupal is definitely becoming more and more diverse albeit gradually. This year contributions by those who did not identify themselves as men were less than 9% and Drupal remains committed to close this gap further and eradicate gender imbalance.

Source: Dries Buytaert’s blog


Europe accounts for the largest contribution to Drupal but the numbers are on the decline in comparison to last year. North America is on the second in the list and is steadily moving upwards and onwards on a year-on-year basis. Asia(India in particular as it remains the second highest contributor after the USA), South America and Africa continue to possess a huge potential to tap into with a large combined population that they have.

Source: Dries Buytaert’s blog


Learn more:

 

The state of Drupal businesses

A large majority of the participants in the Drupal Business Survey 2021 said that their business grew despite the pandemic. The reason is attributed largely to the way clients have been forced into the digital spectrum more so in the last two years. Digitalisation is skyrocketing and so is the demand for Drupal services.

Source: Drupal.org


The survey also suggested a few tips to sustain this growth in business, deal size and project pipeline for the organisations. Good margins on Drupal-related services are important. In other words, project pricing should be meticulously planned and structured. Moreover, you need to offer competitive salaries to your workforce. And, act accordingly when you see that you are unable to deal with the excessive amount of work. That means decrease the amount of work without having an impact on your business revenues by increasing the prices of your Drupal services.

The Charities and Non-profit sector came out as the most popular industry with a large number of the Drupal agencies having clients from this vertical. It was followed by Education, Healthcare & Medicine, Government & Public Administration and Media and they too had a significant number of clients. Explore Drupal by industries here.

Conclusion

Drupal business is booming and everyone of us, the Drupal lovers that we all are, have to ensure it stays that way. We need to learn from each passing year and market our services and Drupal in the right way to the right clients. Yes, there have been less number of contributions comparatively this year but it is not something to be perplexed about and concern ourselves with. Covid-19 pandemic, business growth and Drupal Super Cycle can all be regarded as some of the main reasons behind the slowdown.

Drupal grew by leaps and bounds in previous years : 2019 and 2020. Let’s look forward to another year of prosperity and growth for all the Drupalists out there. Drupal will continue to grow and embrace innovation in 2022. So will Drupal businesses.

Articles Off
Categories: FLOSS Project Planets

Talk Python to Me: #347: Cinder - Specialized Python that Flies

Planet Python - Sat, 2022-01-08 03:00
The team at Instagram dropped a performance bomb on the Python world when they open-sourced Cider, their performance oriented fork of CPython. It contains a number of performance optimizations, including bytecode inline caching, eager evaluation of coroutines, a method-at-a-time JIT, and an experimental bytecode compiler that uses type annotations to emit type-specialized bytecode that performs better in the JIT. <br/> <br/> While it's not a general purpose runtime we can all pick up and use, it contains many powerful features and optimizations that may make their way back to mainline Python. <br/> <br/> We welcome Dino Viehland to dive into Cinder.<br/> <br/> <strong>Links from the show</strong><br/> <br/> <div><b>Dino on Twitter</b>: <a href="https://twitter.com/DinoViehland" target="_blank" rel="noopener">@DinoViehland</a><br/> <b>Cinder Python Runtime</b>: <a href="https://github.com/facebookincubator/cinder" target="_blank" rel="noopener">github.com/facebookincubator</a><br/> <b>Dino's PyCon talk</b>: <a href="https://www.youtube.com/watch?v=xGY45EmhwrE" target="_blank" rel="noopener">youtube.com</a><br/> <b>IronPython</b>: <a href="https://ironpython.net/" target="_blank" rel="noopener">ironpython.net</a><br/> <b>Sam Gross's NoGil work</b>: <a href="https://github.com/colesbury/nogil" target="_blank" rel="noopener">github.com/colesbury/nogil</a><br/> <b>Pyjion</b>: <a href="https://www.trypyjion.com/" target="_blank" rel="noopener">trypyjion.com</a><br/> <b>uWSGI</b>: <a href="https://uwsgi-docs.readthedocs.io/en/latest/" target="_blank" rel="noopener">uwsgi-docs.readthedocs.io</a><br/> <b>Configuring uWSGI at Bloomberg</b>: <a href="https://www.techatbloomberg.com/blog/configuring-uwsgi-production-deployment/" target="_blank" rel="noopener">techatbloomberg.com</a><br/> <b>Locust perf testing</b>: <a href="https://locust.io/" target="_blank" rel="noopener">locust.io</a><br/> <b>Watch this episode on YouTube</b>: <a href="https://www.youtube.com/watch?v=XHVaEj9fnA8" target="_blank" rel="noopener">youtube.com</a><br/> <b>Episode transcripts</b>: <a href="https://talkpython.fm/episodes/transcript/347/cinder-specialized-python-that-flies" target="_blank" rel="noopener">talkpython.fm</a><br/> <br/> <b>--- Stay in touch with us ---</b><br/> <b>Subscribe on YouTube</b>: <a href="https://talkpython.fm/youtube" target="_blank" rel="noopener">youtube.com</a><br/> <b>Follow Talk Python on Twitter</b>: <a href="https://twitter.com/talkpython" target="_blank" rel="noopener">@talkpython</a><br/> <b>Follow Michael on Twitter</b>: <a href="https://twitter.com/mkennedy" target="_blank" rel="noopener">@mkennedy</a><br/></div><br/> <strong>Sponsors</strong><br/> <a href='https://talkpython.fm/sentry'>Sentry Error Monitoring, Code TALKPYTHON</a><br> <a href='https://talkpython.fm/toptal'>TopTal</a><br> <a href='https://talkpython.fm/assemblyai'>AssemblyAI</a><br> <a href='https://talkpython.fm/training'>Talk Python Training</a>
Categories: FLOSS Project Planets

This week in KDE: better MTP support

Planet KDE - Fri, 2022-01-07 23:52

Many of us are still getting over our new years’ food comas, but we managed to get some cool things done anyway!

New Features

Task Manager tooltips for windows that are playing audio now show a volume slider under the playback controls (Noah Davis, Plasma 5.24):

Bugfixes & Performance Improvements

Okular is now more reliable about opening and signing different kinds of password-protected documents (Albert Astals Cid, Okular 21.12.1)

Okular no longer renders fictionbook documents with incorrect whitespace in certain places, and now shows their keywords in the properties dialog (Yuri Chornoivan and Lenny Soshinskiy, Okular 22.04)

Okular no longer leaks memory when viewing documents with Optional Content links (Albert Astals Cid, Okular 22.04)

Connectivity with MTP devices now works much better overall: they now display correctly in the Disks & Devices applet, opening one in Dolphin now refreshes the view automatically when you follow the provided instructions by unlocking your device and allowing access, and the instructions are now clearer and more actionable (Harald Sitter, James John, and me: Nate Graham–but really mostly the first two guys, Plasma 5.24 and Dolphin 22.04)

Bluetooth devices that connect in a nonstandard way like PlayStation Dualshock 3 Wireless Controllers now appear in the Bluetooth applet after being connected (Bart Ribbers, Plasma 5.23.5)

Turning a monitor off and back on no longer sometimes causes certain windows to be resized (Xaver Hugl, Plasma 5.24)

Clicking the Pause button on System Settings’ File Search page now actually pauses indexing (Yerrey Dev, Plasma 5.24)

In the Plasma Wayland session, fixed a case where window thumbnails could fail to appear on Task Manager tooltips with certain configurations (David Edmundson, Plasma 5.24)

The kimpanel popup no longer flickers while entering CJK text (Rocket Aaron, Plasma 5.24)

You can now change the user or group of a file or folder on the desktop (Ahmad Samir, Frameworks 5.91)

Snap apps no longer inappropriately appear as mounted volumes in Places panels (Kai Uwe Broulik, Frameworks 5.91)

Re-mapping keys with the System Settings Advanced Keyboard page now causes any swapped modifier keys to be correctly handled by global keyboard shortcuts (Fabian Vogt, Frameworks 5.90)

User Interface Improvements

The Battery and Brightness applet now turns into just a Brightness applet on computers with no batteries but any brightness controls (Aleix Pol Gonzalez, Plasma 5.24):

Plasma applets with scrollable views now use a more consistent style (Carl Schwan, Plasma 5.24):

The Scale effect is now used by default for window opening and closing, instead of the old Fade effect (Vlad Zahorodnii, Plasma 5.24)

Items are now selected after being moved or created on the desktop (Derek Christ, Plasma 5.24)

You can now see network speeds in bits per second in System Monitor applets and the app (Vishal Rao, Plasma 5.24)

In the Plasma Wayland session, the System Tray item for showing and hiding the virtual keyboard now becomes active only in tablet mode (me: Nate Graham, Plasma 5.24)

When you enable auto-login, you are now warned about some changes you might want to make to your KWallet setup (me: Nate Graham, Plasma 5.24):

Scrollable controls in Plasma and other QtQuick-based apps now only change their contents when you scroll on them if the cursor began over them, not when the cursor happened to pass over them because the view they live on moved while scrolling (Noah Davis, Frameworks 5.90 with Plasma 5.24)

KDE apps that display relative dates now present them with much more precision (Méven Car, Frameworks 5.91):

Yakuake’s System Tray icon is now monochrome (Artem Grinev and Bogdan Covaciu, Frameworks 5.91:

Menus in QtQuick apps now have the same size and appearance as menus in QtWidgets apps (me: Nate Graham, Frameworks 5.91)

Sliders in QtQuick apps can now be manipulated by scrolling over them, just like sliders elsewhere (me: Nate Graham, Frameworks 5.91)

…And everything else

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!

Finally, consider making a tax-deductible donation to the KDE e.V. foundation.

Categories: FLOSS Project Planets

John Goerzen: Make the Internet Yours Again With an Instant Mesh Network

Planet Debian - Fri, 2022-01-07 22:57

I’m going to lead with the technical punch line, and then explain it:

Yggdrasil Network is an opportunistic mesh that can be deployed privately or as part of a global-scale network. Each node gets a stable IPv6 address (or even an entire /64) that is derived from its public key and is bound to that node as long as the node wants it (of course, it can generate a new keypair anytime) and is valid wherever the node joins the mesh. All traffic is end-to-end encrypted.

Yggdrasil will automatically discover peers on a LAN via broadcast beacons, and requires zero configuration to peer in such a way. It can also run as an overlay network atop the public Internet. Public peers serve as places to join the global network, and since it’s a mesh, if one device on your LAN joins the global network, the others will automatically have visibility on it also, thanks to the mesh routing.

It neatly solves a lot of problems of portability (my ssh sessions stay live as I move networks, for instance), VPN (incoming ports aren’t required since local nodes can connect to a public peer via an outbound connection), security, and so forth.

Now on to the explanation:

The Tyranny of IP rigidity

Every device on the Internet, at one time, had its own globally-unique IP address. This number was its identifier to the world; with an IP address, you can connect to any machine anywhere. Even now, when you connect to a computer to download a webpage or send a message, under the hood, your computer is talking to the other one by IP address.

Only, now it’s hard to get one. The Internet protocol we all grew up with, version 4 (IPv4), didn’t have enough addresses for the explosive growth we’ve seen. Internet providers and IT departments had to use a trick called NAT (Network Address Translation) to give you a sort of fake IP address, so they could put hundreds or thousands of devices behind a single public one. That, plus the mobility of devices — changing IPs whenever they change locations — has meant that a fundamental rule of the old Internet is now broken:

Every participant is an equal peer. (Well, not any more.)

Nowadays, you can’t you host your own website from your phone. Or share files from your house. (Without, that is, the use of some third-party service that locks you down and acts as an intermediary.)

Back in the 90s, I worked at a university, and I, like every other employee, had a PC on my desk with an unfirewalled public IP. I installed a webserver, and poof – instant website. Nowadays, running a website from home is just about impossible. You may not have a public IP, and if you do, it likely changes from time to time. And even then, your ISP probably blocks you from running servers on it.

In short, you have to buy your way into the resources to participate on the Internet.

I wrote about these problems in more detail in my article Recovering Our Lost Free Will Online.

Enter Yggdrasil

I already gave away the punch line at the top. But what does all that mean?

  • Every device that participates gets an IP address that is fully live on the Yggdrasil network.
  • You can host a website, or a mail server, or whatever you like with your Yggdrasil IP.
  • Encryption and authentication are smaller (though not nonexistent) worries thanks to the built-in end-to-end encryption.
  • You can travel the globe, and your IP will follow you: onto a plane, from continent to continent, wherever. Yggdrasil will find you.
  • I’ve set up /etc/hosts on my laptop to use the Yggdrasil IPs for other machines on my LAN. Now I can just “ssh foo” and it will work — from home, from a coffee shop, from a 4G tether, wherever. Now, other tools like tinc can do this, obviously. And I could stop there; I could have a completely closed, private Yggdrasil network.

    Or, I can join the global Yggdrasil network. Each device, in addition to accepting peers it finds on the LAN, can also be configured to establish outbound peering connections or accept inbound ones over the Internet. Put a public peer or two in your configuration and you’ve joined the global network. Most people will probably want to do that on every device (because why not?), but you could also do that from just one device on your LAN. Again, there’s no need to explicitly build routes via it; your other machines on the LAN will discover the route’s existence and use it.

    This is one of many projects that are working to democratize and decentralize the Internet. So far, it has been quite successful, growing to over 2000 nodes. It is the direct successor to the earlier cjdns/Hyperboria and BATMAN networks, and aims to be a proof of concept and a viable tool for global expansion.

    Finally, think about how much easier development is when you don’t have to necessarily worry about TLS complexity in every single application. When you don’t have to worry about port forwarding and firewall penetration. It’s what the Internet should be.

    Categories: FLOSS Project Planets

    KDE Ships Frameworks 5.90.0

    Planet KDE - Fri, 2022-01-07 19:00

    Saturday, 8 January 2022

    KDE today announces the release of KDE Frameworks 5.90.0.

    KDE Frameworks are 83 addon libraries to Qt which provide a wide variety of commonly needed functionality in mature, peer reviewed and well tested libraries with friendly licensing terms. For an introduction see the KDE Frameworks release announcement.

    This release is part of a series of planned monthly releases making improvements available to developers in a quick and predictable manner.

    New in this version Baloo
    • [kioslaves/tags] Set proper display name for root entry (bug 416389)
    BluezQt
    • Expose missing services to QML
    Breeze Icons
    • Support old cmake
    • Add places-book, -library, -comic icons
    • Include “@” in the icon_files list for installation
    • Make FM and system settings icons color-aware
    • Improve installation of light fallback icons
    Extra CMake Modules
    • Add support for finding Poppler’s Qt6 library
    • Add support for finding Qt6 QML modules
    • Add missing prefix to version-less install directory aliases
    • FindInotify.cmake: add target support
    • Define version-less install targets in KDEInstallDirs5.cmake
    KArchive
    • Fix printf conversion specifiers
    KAuth
    • Use version-less and non-deprecated data install dir variable
    • ActionReply: remove operator« and operator»
    KBookmarks
    • [kbookmarksmanager] Don’t recreate static QRegularExpression in findByAddress
    KCalendarCore
    • ICalFormat: reduce calls to dtStart()/dtEnd(), use the local vars
    • Fix timezone information being lost when creating events
    KCMUtils
    • Wrap deprecated KDelarative::ConfigModule::aboutData method call in deprecation wrappers
    • Deprecate KPluginSelector class
    • Allow KCMUtils to build without deprecated KCoreAddons methods
    • Update showNavigationButtons to use enum type
    • Fix PluginPage deprecation docs
    KConfig
    • kconfig_compiler/CMakeLists.txt - use CMAKE_CROSSCOMPILING for the check
    • Allow kreadconfig/kwriteconfig to access the root group
    KConfigWidgets
    • Fix conditions used in cmake.in config file
    • [kcolorschememodel] Read .colors files from assets on Android
    • Sync default colors from Breeze Light color scheme
    • kcommandbar: Don’t warn if action is separator
    • [kcmodule] Deprecate aboutData and componentData
    • [KCommandBar] Fix resetting m_hasActionsWithIcons
    KCoreAddons
    • Introduce K_PLUGIN_CLASS macro for creating plugin factory without metadata
    • Don’t hardcode kservicestypes5 as search path
    • Put QT_VERSION check around Kdelibs4Migration class
    • FindProcstat: Fix CMake warning and use an imported target
    • Don’t put the plugins in a “/plugins” sub-dir in the builddir
    • KPluginFactory: report errors from QPluginLoader
    • KF5CoreAddonsMacros: Replace “.” with “_” for KPLUGINFACTORY_PLUGIN_CLASS_INTERNAL_NAME compile definition
    • Clarify deprecation docs of KPluginLoader::factory
    • Write value of QT_MAJOR_VERSION in cmake config file
    KDBusAddons
    • Fix conditions used in cmake.in config file
    • API docs: improve docs for D-Bus activation and startup id handling
    KDeclarative
    • Drop lib prefix when building for Windows
    • Follow method name changes in kglobalaccel
    • Use “frameless” style for grid and scroll view QtQuick KCMs by default
    • Detect overlapping shortcuts
    KDELibs 4 Support
    • Remove ugly white frame from beautiful Latvian flag
    KDocTools
    • Don’t compare signed with unsigned int
    KDE GUI Addons
    • Add KIconUtils::addOverlays() overload to allow passing QIcon and QStringList (bug 447573)
    • KSystemclipboard: add a nullcheck (bug 447060)
    • WaylandClipboard: Do not emit change upon the offer for our own source
    KHolidays
    • holiday_us_en-us - add Juneteenth
    KI18n
    • API dox: fix KUIT tags examples to use xi18n* calls
    KIconThemes
    • KIconColors: add Complement and Contrast
    • KIconColors: add .ColorScheme-ActiveText
    KIO
    • RenameDialog: Don’t show size/dates if we don’t know them
    • Add PreviewJob::availableThumbnailerPlugins method
    • kdirmodel: Return “unknown” icon when the icon is null (bug 447573)
    • Finish PolKit integration
    • Fix hidden NTFS mountpoints when /etc/mtab is a regular file
    • KFileItemActions: use different string for ‘open folder with’
    • Deprecate Scheduler::setJobPriority
    • Fix desktop link modification dialog
    • Do not access service past its prime (bug 446539)
    • [KFilePlacesModel] Drop redundant “entry” name from context menu
    • [knewfilemenu] Hide progress info for stat jobs
    • [KPropertiesDialog] Fix porting bug to KLazyLocalizedString
    • [KFilePlacesView] Drop redundant “entry” name from context menu
    • [kfilepropertiesdialog] Don’t show UI for default apps on Windows
    • Fix warning when showing preview whose parent is /
    • Revert “Do not create thumbnails when it requires to copy the file to /tmp”
    • Port from KPluginMetaData::readTranslatedValue to KJsonUtils::readTranslatedValue
    • [OpenUrlJob] Don’t just open .part files
    • De-duplicate service menus from KServiceTypeTrader and KFileUtils results
    • KCoreDirLister: in slotEntries pre-sort new items added and add them more efficiently
    Kirigami
    • WheelHandler: Improve consistency with scrolling in Qt Widgets, add more properties
    • Fix navigation buttons on layers
    • FormLayout: Switch an instance of let to var
    • ShadowedRectangle: Add renderType option
    • AboutPage: show spinner feedback while loading remote icon
    • AboutPage: Only mess with the URL when we are dealing with KDE products (bug 444554)
    • AboutItem: don’t multiply sizes by devicePixelRatio
    • AboutItem: Fix incorrect usage of height: and width: inside layouts
    • OverlaySheet: Modify anchors on tall headers imperatively
    • globaltoolbar: Use strict === equality in JavaScript
    • PageRowGlobalToolBarUI: don’t animate opacity, take two (bug 417636)
    KItemModels
    • Support numeric sort and filter roles next to role names
    • Forward removeRow(s) to QML
    KJobWidgets
    • KUIServerV2JobTracker: Add “transient” property support
    KNewStuff
    • Drop lib prefix when building for Windows (bug 446950)
    • Remove defunct manual khotnewstuff_upload test
    • Revert “Adapt build system for building against qt6” (commited in bad
    • Revert “Add volker fix about cmake variable” (commited in bad branch)
    • Fix i18n* functions for knewstuff-dialog not existing
    • Move KNS3::Action class to new KNSWidgets submodule
    • New class: KNS3::Action
    KNotification
    • Use the org.freedesktop.Notifications.ActivationToken signal
    • Unify WITH_KWINDOWSYSTEM and HAVE_KWINDOWSYSTEM build vars
    • Offer API to support xdg_activation_v1
    KPackage Framework
    • Add a service type property definition for NoDisplay
    KParts
    • partviewer test: Add assertion to make sure we load the plugin factory successful
    • Increase KF_DISABLE_DEPRECATED_BEFORE_AND_AT to latest released frameworks version
    • Port deprecated KFileItemActions::associatedApplications method call
    • Port deprecated KService::instantiatePlugin method call
    • Call KPluginFactory::create overload without plugin keyword
    • Deprecate KParts::Plugin class
    • Port KPart template away from deprecated KPluginLoader
    • Port from KPluginLoader::findPlugins to KPluginMetaData::findPlugins
    KRunner
    • Do not require Plasma when building without deprecations
    • dbusrunner: Set parent for matches to the current runner
    • Allow runners to opt-out storage of entry to history
    • RunerContext: Allow runners to update the query string (bug 433636)
    KService
    • Wrap KServiceTypeTrader methods to create instances also in KCOREADDONS visibility guard
    • Do not use toLower on desktopEntryName
    • Expand deprecation docs for KServiceTypeTrader
    • Deprecate KServiceTypeTrader class
    • Emit deprecation warning for KServiceType class
    • Deprecate KPluginInfo in favor of KPluginMetaData
    KTextEditor
    • Add a formatting commit to ignore-list
    • try to fix behavior for vimode on completion (bug 444883)
    • Change build system to make building against qt6
    • Apply word filter on async completion models (bug 444883)
    • Validates the input method attributes received from input method (bug 443977)
    • Remove unused exporting of SwapFile class symbols
    • Fix cursor position after completion tail restore
    • Color current indentation line differently
    • Vimode-keyparser: Make some functions more efficient
    • Use KTextEditor::Range by value
    KUnitConversion
    • Prepare KUnitConversion::UnitCategory to become non-virtual in KF6
    • Prepare for KUnitConversion::Unit to become non-virtual in KF6
    • Fix cache file removal in valuetest
    • Fix cyclic reference between Unit and UnitCategory
    KWallet Framework
    • Add desktop file for kwalletd
    • Properly apply KAboutData
    • Fix notifyrc name
    KWayland
    • Make linux/input.h a hard dependency
    KWidgetsAddons
    • Fix year format in heading of KDatePicker
    • Localise numbers displayed in KDatePicker
    • [KMessageWidget] Ignore resize event when doing animatedShow()
    KWindowSystem
    • Avoid using QByteArray::operator[] for the null terminator (bug 434557)
    • Avoid creating and leaking QWindows
    KXMLGUI
    • Fix nested @ expansion in CMake config file
    • [KToolBar] Add actions from delayed toolbutton menus to context menu
    • Do not steal all keys from shortcut
    Plasma Framework
    • plasmoidheading: make corners consistent, improve top line color
    • PC3 ItemDelegate: Actually use ItemDelegate type
    • Add a destroy method to the view
    • PC3 ProgressBar: fix fill going OOB when indeterminate state ends (bug 428955)
    • Fix background corners and PC3 ToolTip style (bug 442745)
    • fix availableScreenRect for applets/containments (bug 445495)
    • widgets/tasks.svgz: Use more saturated colors for the focus and attention states (bug 434821)
    • When adding a new applet to a desktop containment, add it to the center
    • wallpaperinterface: Update “contextualActions” after clearing actions (bug 446195)
    Purpose
    • [imgur] Improve grammar of upload notification text
    • [imgur] Show deletion url in notification (bug 441566)
    • [imgur] Copy link to clipboard and show notification (bug 437347)
    • Don’t build bluetooth plugin on non-Linux
    • Unbreak the Nextcloud plugin
    • Add Twitter URL plugin
    QQC2StyleBridge
    • TextFieldContextMenu: Fix menu not opening
    • Add A SpinBox test
    Solid
    • udisks backend: don’t assume /etc/mtab is not present
    • Remove trailing \x00 from string returned by Q6File::decodeName()
    Sonnet
    • Don’t access an out of bounds index into a QString
    Syntax Highlighting
    • Systemd unit: update to systemd v250
    • Separate dynamic StringDetect rule to avoid copies in StringDetect::doMath()
    • Automatically replace StringDetect to DetectChar, Detect2Chars or AnyChar when possible
    • Very basic support for [[link]] and [[link][desc]]
    • support implicit link in normal text
    • SQL and SQL (PostgreSQL): nested comments support (bug 442449)
    • GnuPlot: fix a lot of issue (bug 442181)
    • PHP: add readonly, never and some functions/classes/constants of php-8.1
    • Bash and Zsh: support of ${!2} (bug 440360)
    • Bash: more unixcommands (GNU coreutils and some others) (bug 439211)
    • Fix language specification comments
    • Rename MIME type text/x-objcpp-src => text/x-objc++src
    • Add Homuncuius.theme
    • Remove rawhtml, not needed
    • Add grammar for RETRO Forth
    ThreadWeaver
    • Use fetchAndStoreOrdered() instead of fetchAndAddOrdered()
    • Fix invalid lambda argument for use in std::for_each
    Security information

    The released code has been GPG-signed using the following key: pub rsa2048/58D0EE648A48B3BB 2016-09-05 David Faure faure@kde.org Primary key fingerprint: 53E6 B47B 45CE A3E0 D5B7 4577 58D0 EE64 8A48 B3BB

    Categories: FLOSS Project Planets

    Ingo Juergensmann: Moving my repositories from Github to Codeberg.org

    Planet Debian - Fri, 2022-01-07 17:50

    Some weeks ago I moved my repositories from Github (evil, Microsoft, blabla) to Codeberg. Codeberg is a non-profit organisation located in Germany. When you really dislike Microsoft products it is somewhat a natural reaction (at least for me) to move away from Github, which was bought by Microsoft, to some more independent service provider for hosting source code. Nice thing with Codeberg is as well that it offers a migration tool from Github to Codeberg. Additionally Codeberg is also on Mastodon. If you are looking for a good service hosting your git repositories and want to move away from Github as well, please give Codeberg a try.

    So, please update your git settings to https://github.com/ingoj to https://codeberg.org/Windfluechter (or the specific repo).

    Categories: FLOSS Project Planets

    Kdenlive 21.12.1 released

    Planet KDE - Fri, 2022-01-07 14:56

    The first maintenance release of the 21.12 series is out with fixes to ripple mode, project archiving and multiple bins. This version also enforces to transcode footage with variable framerates to a standard framerate value. 

     

    • Fix multiple bins should always stay tabbed together. Commit.
    • Fix shortcuts sometimes broken on fullscreen monitor. Commit.
    • Enforce 29.97 fps when using a clip with 29.94 or 29.96 fps. Commit.
    • Fix audio thumbs not created after profile change. Commit.
    • Fix compilation warnings (function type compatibility). Commit.
    • Ripple: fix strange behaviour on Windows and macOS. Commit.
    • Add xml ui for audiolevelgraph effect and other xml format fixes. Commit.
    • Improvements and fixes for the status bar message field. Commit.
    • Add ripple test for single track groups. Commit.
    • Fix ripple in several scenarios with groups. Commit.
    • Improve Keybind Info with compositions. Commit.
    • Fix crash on clip insert in ripple mode. Commit.
    • Fix archiving. Commit.
    • Fix keyframe disappearing in timeline after moving the previous one in effect stack. Commit.
    • Don’t allow undo when resizing clip/composition (fixes crash). Commit.
    • Fix freeze on multiple title clip duplication. Commit. Fixes bug #443507
    • Fix mistake in last commit. Commit.
    • Various fixes on project opening with missing proxies (playlist and timeremap broken). Commit.
    • Add more ripple tests. Commit.
    • Fix ripple of groups after commit c1b0f275. Commit.
    • Restructure ripple code to make it possible to run more tests. Commit.
    • Fix mix corruption when moving a clip with start and end mixes to another track, add test. Commit.
    • Fix concurrency crash with autosave and multicam mode. Commit.
    • Fix crash on extract frame if image was already part of the project. Commit.
    Categories: FLOSS Project Planets

    Wallpaper Livestream (Part 2, Sunday January 9th)

    Planet KDE - Fri, 2022-01-07 12:31

    After a very successful livestream at the beginning of the week (with a heartfelt thank-you to everyone who popped in) it’s time to hunker down for one more afternoon to finish what we started! This Sunday (January 9th) I’ll once again be hosting a stream, where we’ll finish the wallpaper together. All the tedious manual work is well behind us, so this round should be mostly finery and polish in addition to the background, which is all fun and creative stuff. Click here for the Youtube link to the upcoming stream if you want to set a reminder for yourself. The livestream will run at least 2 hours, but if we’re all having fun I’ll run it for an additional 2 after a brief intermission.

    For everyone who didn’t have a chance to attend, in the last livestream we started with the above sketch done in Krita and experimented with a new method on-the-fly where we leaned into Inkscapes snapping features to create a 3D mesh by hand, with the plan to use the built-in “Restacking” tool to enable hand-drawn polygons with “perfect” edges. While the mesh method was a rousing success and testing the restack feature gave ideal results, near the end of the stream it was realized that watching me draw triangles for several hours was not a hip idea, so I decided to take the remainder of the more tedious work offline.

    Which was a good thing, because I had to throw away hours worth of hand-drawn polygons. I was not a happy camper. There was a damper in the pamper. It was a stylistic cramper. Simply put I literally zigged when I should have zagged and half the polygons were misaligned because of it.

    Not to worry though, because I had the chance to experiment a bit more with less certain ideas and while I’m still playing a bit, I’m even happier with the redone results. Almost like I had roughly 5 hours of practice…

    In terms of livestreaming itself it went off without a hitch on a technical level, but the overall quality was pretty awful. I’m sorry for that, I didn’t realize how bad it was. I’ve been making improvements so the quality of future streams will be far better. Earnestly I wasn’t sure if I’d be doing it again so I didn’t put an overwhelming amount of effort into the initial setup. I fully expected to have large swaths of time without anyone watching, but while the quality of the feed was borderline unwatchable I saw far more activity than I anticipated, and the chat was more than excellent in making me want to continue doing streams. You all rock!

    There’s still testing and adjustments to be made but it’ll definitely have much higher video quality this upcoming stream, hopefully have better audio quality, and there’s a 50/50 chance I’ll broadcast in (up to) 4K (if the latency is acceptable). I didn’t have hardware encoding set up, I think it’ll be waaaaay nicer for me not to be encoding 4K to 1080p video on my CPU while using a CPU-intensive drawing application. It’s almost like my video card is meant for video. Additionally, and while I make no guarantees, I’ll also be attempting to hook up screen mirroring with my Android drawing tablet so I can use both it and my desktop computer to complete the wallpaper using all the tools at my disposal on-air. While the mixing of vector and traditional art was debated in an older wallpaper, I’ll have you – yes, you! – to give live feedback.

    Once again I want to thank everyone who made it (or wanted to make it) to the previous stream. It was a delightful experience and I hope to see you this Sunday!

    Sunday! Sunday! (Sunday!)
    Categories: FLOSS Project Planets

    Reunited after a decade

    Planet KDE - Fri, 2022-01-07 10:30

    It’s been more than ten years since Dolphin, KDE’s versatile file manager, introduced its own custom QGraphicsView-based view engine. With that came more detailed view modes with grouping support, animated transitions, and a new places panel with sections. Unfortunately, it is all based on a now long-abandoned “Itemviews NG” project, and is inherently incompatible with Qt’s traditional model-view code used elsewhere in KDE.

    Looks virtually the same, doesn’t it?

    A few weeks ago I sat down and over the course of a few evenings I ported Dolphin back to using the KFilePlacesView provided by KIO which is used in the Open and Save dialogs, among other places.

    First of all, I had to look at what extra features were needed that either had to be replicated in KFilePlacesView or required the addition of hooks for Dolphin to provide them independently. For the longest time, the biggest roadblock has been the lack of sections, which luckily were added in late 2017. Furthermore, middle-click and control-click handling had to be added since file dialogs usually don’t have tabs.

    I started by cleaning up and re-organizing the context menu, dropping redundant labels and making the order of items more consistent. Important actions, such as “Eject”, “Unmount”, and “Empty Trash” moved to the top, while entries for manipulating the view, e.g. icon size are only shown when clicking on an empty area. Dolphin was further put into position to add its own actions for “Configure Trash” or “Lock Panels” by using QWidget::addAction on the view itself. Depending on the QAction’s priority they either show up at the top or bottom of the context menu.

    After that, I added additional signals: For instance, when clicking on a USB stick, we want to mount it before Dolphin opens a new tab or window. Its terminal panel also has a delicate procedure where it first changes to your home directory before trying to eject a drive it might be using, as to avoid a “bash is still accessing this device” error. Just the laborious things you have to do in order to provide an excellent user experience.

    With a unified code base, we can look into adding features again

    With all of that implemented, I was able to get rid of Dolphin’s custom places panel code, and deleted just over 4000 lines of code, which amounts to roughly 10 % of Dolphin’s overall code base! There are certainly some minor glitches in how the icons and free space bar is currently rendered, but sometimes perfect is the enemy of good, and with just a single implementation to worry about, we can use the upcoming months until the next KDE Gear release to thoroughly test and polish it up.

    Categories: FLOSS Project Planets

    Maui Report 17

    Planet KDE - Fri, 2022-01-07 09:17

     

    Today, we bring you a new report on the Maui Project’s progress.

    Maui 2.1 was released almost two months ago, and since then new features, bug fixes, and improvements have been made to the Maui set of apps and frameworks; the following blog post will cover some of the changes and highlights from the last month of development.

    What’s new?

    Among many bug fixes that will be listed below, some of the highlights include the dark mode toggle option for Android, styling cleanups, and UX interaction animations.

     

     

    Most of the updates were concentrated on the MauiKit Frameworks, which received paper cut fixes, animations, and upgrades.

    MauiKit Core controls such as the SelectionBar, TabView, delegates, and other components now have smooth animations; the implementation of custom controls such as ContextualMenu, Dialogs, browser views, Page, etc, have a more clean implementation, and the delegate templates expose more sizing options.

    MauiKit CSD now has a new “style” named Dynamic, which instead of using custom assets for the buttons, uses KDecoration thanks to the work from psifidotos.

    On the Dialogs and TabButtons, the close button is now positioned on the right side, for consistency. 

    The Maui Style received fixes for more states, such as flat, highlighted, hovered, etc. And support for a custom Theme for Kirigami was added, enabling it to have dark and light mode variants.

    The Luv icons were updated to the latest changes in master, now all Maui Apps use their latest revision.

    MauiKit now supports the newly introduced custom accent color from Plasma and uses more extensively the color scheme palette, so now most items use an opaque color with a readable text color depending on its highlight or hover state.

     

    Light and Dark modes on Android.

     

    The MauiKit Core model template now has support for moving items, this is shown in Vvave’s main playlist, which now can be reorganized by DnD.

    For the Android builds, Kirigami was upgraded to the latest stable release, the same for the KF5 frameworks.

     

    MauiKit Filebrowsing adds support for more video formats, such as FLV and MOV.

     

    You can now re-organize the main playlist on Vvave by dragging and dropping. Issues with setting the right album art for MPRIS were fixed.


    Index has been updated to the latest KF5 Frameworks, clearing all deprecation warnings and can now be built on FreeBSD correctly.

    Pix, Nota, Clip, Buho, and all other Maui Apps were upgraded to all the latest MauiKit changes, and small fixes were made here and there for all of them.

     

    MauiKit Frameworks and Maui Apps 2.1.1 is scheduled for February.

    To follow the Maui Project’s development or say hi, you can join us on Telegram: https://t.me/mauiproject.

    We are present on Twitter and Mastodon:

    Release date 2021 2022 2023 February 1.2.1 2.1.1 2.2.2 May 1.2.2 2.1.2 3.0.0 August 2.0.0 2.2.0 3.1.0 November 2.1.0 2.2.1 3.1.1

    A quick reminder of the project near future goals:

    • More feature-rich applications. [In Progress]
    • Improve data synchronization using NextCloud. [Pending]
    • Improve performance. [In progress]
    • Move beta apps to stable. [In Progress]
      • Shelf and Clip have been moved to stable, missing the Sol, NX SC, Booth, Strike, Bonsai

    The post Maui Report 17 appeared first on MauiKit — #UIFramework.

    Categories: FLOSS Project Planets

    Web Review, Week 2022-01

    Planet KDE - Fri, 2022-01-07 09:12

    Happy new year 2022! Let’s go for the first web review for this year.

    You (probably) don’t need ReCAPTCHA | nearcyan

    Tags: tech, web, security, captcha, gafam

    Indeed, don’t use this by default. This is likely overkill and has terrible side effects. Look up for the alternatives proposed in this article first.

    https://nearcyan.com/you-probably-dont-need-recaptcha/


    A.I. Is Solving the Wrong Problem | by Marianne Bellotti | OneZero

    Tags: tech, ai, design, decision-making, knowledge

    Interesting article about how we badly design AI systems which make them very vulnerable to the quality of the data they receive. That’s in part why I’d expect that somehow we’ll see knowledge representation somehow come back in fashion because they have some potential to lead to better explicability in models.

    https://onezero.medium.com/a-i-is-solving-the-wrong-problem-253b636770cd


    Chatbots: Still Dumb After All These Years | Mind Matters

    Tags: tech, ai, neural-networks

    Very well makes the point on why general AI or good conversational bots are nowhere in sight with neural networks. It’s just freaking hard to push general knowledge into those networks… Also there’s the limit of not having a body and not feeling pain. This is indeed still a requirement to learn things and give them meaning.

    https://mindmatters.ai/2022/01/will-chatbots-replace-the-art-of-human-conversation/


    My Setup for Self-Hosting Dozens of Web Applications + Services on a Single Server

    Tags: tech, self-hosting, infrastructure

    Interesting ideas for hosting your own infrastructure. Some things I do similarly, others I do differently. Good food for thought.

    https://cprimozic.net/blog/my-selfhosted-websites-architecture/


    ntfy.sh | Send push notifications to your phone via PUT/POST

    Tags: tech, monitoring, notifications, web

    Looks like a nifty little tool for sending notifications from a script to your phone or such.

    https://ntfy.sh/


    You don’t need that CORS request - Nick Olinger

    Tags: tech, http, cors, performance

    Good reminder that CORS can have an impact regarding the performance of your application.

    https://nickolinger.com/blog/2021-08-04-you-dont-need-that-cors-request/


    How a Single Line of Code Made a 24-core Server Slower Than a Laptop

    Tags: tech, multithreading, performance, profiling

    Good reminder on how a shared atomic can become a huge bottleneck in multi-CPU setups.

    https://pkolaczk.github.io/server-slower-than-a-laptop/


    Floating Point Visually Explained

    Tags: tech, mathematics, floats

    Now this is a really neat way to explain how floats work and how you loose precision. Definitely a good trick I should keep in mind when I have to talk about them, it’s always been a chore to explain them.

    https://fabiensanglard.net/floating_point_visually_explained/


    Work Sample Tests - Jacob Kaplan-Moss

    Tags: hr, management, interviews

    Excellent series about work sample tests during interviews. Definitely good food for thought in there, I already changed how I was doing a few things with it and what I tested worked nicely so far.

    https://jacobian.org/series/work-sample-tests/


    How German Librarians Finally Caught an Elusive Book Thief - Atlas Obscura

    Tags: book, history, surprising

    Very astonishing story, this is a long career in rare maps theft…

    https://www.atlasobscura.com/articles/how-german-librarians-caught-a-book-thief


    The UX on this Small Child Is Terrible - McSweeney’s Internet Tendency

    Tags: funny, ux, children

    This is a funny satire about children from the UX point of view. You can tell this designer would want a few improvements. :-)

    https://www.mcsweeneys.net/articles/the-ux-on-this-small-child-is-terrible


    Bye for now!

    Categories: FLOSS Project Planets

    Mikko Ohtamaa: Building cryptocurrency site with Svelte, Python and TimescaleDB

    Planet Python - Fri, 2022-01-07 07:02

    This blog post is a repost of the original technical overview of the Trading Strategy protocol software stack for community feed aggregators. Please read the original blog post for the best layout and formatting.

    The audience of this post is software developers who are looking to build scalable software-as-a-service solutions and are interested in Svelte, Python and TimescaleDB technologies. Developers who are interested in Web3, Ethereum, cryptocurrency and blockchain technologies will also find this post useful.

    What are Trading Strategy protocol and algorithmic trading?

    Trading Strategy is a new service for algorithmic and technical trading of cryptocurrencies on decentralised exchange (DEXes).

    Algorithmic trading is a derivative of technical analysis; taking trading positions based on pure mathematics and data. Algorithmic trading is part of quantitative finance, the opposite of value investing where trading decisions are made based on fundamentals. Algorithmic trading provides a systematic approach to trading compared to methods based on trader intuition or instinct. Whereas technical analysis often aids humans to take trading positions, in its purest form in algorithmic trading a trading program follows a set of trading rules and independently executes trades on the market 24/7.

    Today, Trading Strategy offers market data feeds for Uniswap compatible exchanges across three different blockchains (Ethereum, Binance Smart Chain, Polygon). We expect to cover all major decentralised exchanges and exchange types on all major blockchains by the end of the year.

    Our mission is to make algorithmic by developing and investing in algorithmic trading strategies easy. Although serving the market data is the first step, Trading Strategy is going to grow beyond the information service website. During the course of 2022, the service will be decentralised, so that the whole software solution, strategy and trade execution will be runnable anyone independently (so-called operating a node).

    You can read more about our future plans in our vision blog post.

    Rich in technical wealth

    Trading Strategy chose modern architecture and the best components of 2021 for its software development, making its codebase high in technical wealth.

    Technical wealth is the opposite of technical debt. As Trading Strategy was able to start as a clean slate project, we had the privilege to pick the latest technologies and build our architecture around these. This enables us to build faster and do changes more dynamically. As an example, a lot of out of the box features offered by TimescaleDB would have taken us months if we had built them ourselves.

    The decentralised finance (DeFi) industry itself is high in technical wealth compared to traditional finance (TradFi). This is due to the use of public ledger (open data), free-as-in-speech codebases (open source) and permissionless public blockchains (open access). This is the opposite of the traditional financial services that are built around closed networks, private APIs and exclusive access. Privileged and siloed software development leads to high maintenance cost long term, as there are no people who are able to work with the code. For references, see this blog post on legacy investment bank software and Google’s woes about maintaining their own Linux kernel with 9000+ in-house patches. Writing financial applications for DeFi is 10x  – 100x more developer productive than writing them for TradFi.

    What is a Web3?

    From the software developer point of view, Web3 refers to backend-free services. No logins or registrations are needed. The user data is not processed and stored on a private server, but a public blockchain where the business logic is wired together using smart contracts. Any transaction, or a “POST request” in the traditional parlay, is initiated by users themselves, using their private key on their locally stored wallet application.

    In this kind of model, there are no sysadmin fraud risks, no data loss risks or data liability risks with user identity information. The user is in 100% control. It is a fairer world where users have more control over the revenue streams they generate. Big IT like Facebook and Google have fewer unfair monetization opportunities on user data.

    Only some services are a good fit for Web3. At the moment Web3 works best for pseudonymous and public data use cases. This is almost all finance, provenance (NFTs), public social media like Twitter and discussion forums and eCommerce.

    Web3 is still early: though most pieces have been figured out in computer science theory, the implementation is still under development. For example, doing database-like traffic (ThreadDB) and storage (Arweave, Storj) can be still considered “alpha” today.

    Software stack overview

    Below is a walkthrough of how the HTTP requesting of Trading Strategy website is set up. Because Trading Strategy application is eventually going to be a Web3-like oracle node in a distributed network, everything built API first. There are no internal APIs – the website uses the same public market data APIs as everyone else.

    Trading Strategy Oracle is a process that indexes blockchain data: DEX trading data, tokens and so on. Oracle and web processes communicate over TimescaleDB. Oracle is responsible for tasks like generating OHLCV candle data, generating liquidity maps and fetching US dollar reference prices. Oracle processes connect to various blockchain GoEthereum nodes that are part of the P2P network for the respective Ethereum Virtual Machine based blockchains.

    Frontend: Why did we choose Svelte?

    Svelte is a new JavaScript frontend framework and an alternative to React, Vue.js and Angular. Svelte comes with an integration package called SvelteKit that adds a standard web server, routing, server-side rendering and other core functionality needed to build a fully functional website.

    We considered React for Trading Strategy . React is the de facto frontend framework choice of the cryptocurrency industry. However, even with our extensive experience in React, we chose Svelte because we believe Svelte is the framework of the future. Svelte offers reactivity with ahead-of-time compiled virtual DOM free approach. Svelte components are very maintanable single files, containing normal HTML template and normal CSS code instead of bastardized “styles-in-JS” or domain-specific templating approaches. Writing reactive logic in Svelte is easier than in other frameworks, due to its elegant design making the most developer-friendly frontend framework.

    SvelteKit takes the developer experience of Svelte even further, by introducing the concepts of file-system based routing, simple server-side rendering and integrated web server (Vite). With SvelteKit’s batteries included approach an application developer spends less time on plumbing, boilerplate code and debugging async reactivity mess This all translates to better efficiency: the codebase is easier to read and maintain due to standardized coding conventions across open source libraries, components are faster to develop and new developers pick up the pace faster.

    We also use components outside Svelte. We use uPlot for charting. Though the TradingView is the most popular JS framework for technical trading, we are puritans that go with 100% open-source approach as we are building for long term. uPlot was the charting library with an open-source license. For our number heavy tables we use DataTable library. For Web3 integration, we use web3.js through svelte-web3.

    Backend: Why did we choose Python, Pyramid and SQLAlchemy?

    Pyramid is a web framework for Python and SQLAlchemy is Python’s most popular ORM. We have experience writing Python applications since 2006 using Django, Flask and Pyramid. We also have experience writing backends in Node.js with various frameworks like Next.js.

    For developers who know several programming languages, Python is superior choice for the backend. Writing Python programs takes fewer keystrokes. Python is the most readable of all programming languages. Optional typing support is a great way to make the code more static when the team grows.

    There is a forever battle with sync vs. async. There is greater maintenance efficiency with colored function free, linear threaded, Python code. Our workloads are computationally sensitive, not IO sensitive, so using async IO would cause more headaches and we would get no benefits out of it.

    We chose Pyramid and SQLAlchemy because we are doing API first backend and complex databasing with our special workload. Trading Strategy currently features tracking of 800k trading pairs (NASDAQ has only 3000). This is not your run of the mill CRUD and admin UI application. For this kind of use case, Pyramid and SQLALchemy are the choice today. This framework combo offers powerful tooling to cover advanced use cases without sacrificing developer productivity or being completely outside of an average backend developer skillset.

    For our API tooling and developer communications we chose OpenAPI 3, also known as Swagger. Integration is mostly cost-free: pyramid_openapi3 validates the API definition, validates requests and replies, and can automatically route payloads to their corresponding endpoints and offers Swagger interactive API explorer. This all saves us a lot of manual development.

    For background workers, we use Dramatiq library with Redis broker. Dramatiq task server is simpler, much easier to understand and maintain than more well-known Celery.

    Data research: Why did we choose Jupyter notebook?

    Most quantitative finance in the world uses Jupyter Notebooks and Python data science libraries like Pandas and Numpy. This is the strongest suite of Python that no other programming language can match. In fact, Pandas was originally developed by an investment bank.

    Trading Strategy algorithm backtesting is done in Jupyter. We offer a Trading Strategy client library so that quants can develop their algos against decentralised exchanges without need to know low level blockchain specific details. If you are interested to see if you can beat the market please see Getting started tutorial (beta warning: better to join our Discord as well.)

    Database: Why did we choose TimescaleDB?

    TimescaleDB is a PostgreSQL extension specialised in time-series data, especially the “big” flavour of it. The alternatives included Clickhouse and xxx.

    We chose TimescaleDB, because they are based on PostgreSQL. During the last 20 years, PostgreSQL has overtaken as the most advanced open-source database. PostgreSQL has the most vibrant database ecosystem on this planet. Tuning PostgreSQL is well-known: there are multiple products and companies to support in-house development.

    Many of the core TimescaleDB features make our life easier. For example, hypertables provide fast insert times on large time-series datasets – otherwise inserting your one-billionth row starts to slow down. Continuous aggregates give us free upsampling 1-minute OHLCV candles to 5 minutes to 30 days periods.

    TimescaleDB completed their Series B funding round where they raise $40M. Based on the quality of their product, the detail they go in their developer communications, we can see why they could be the winning horse of time-series databases.

    TimescaleDB team has been the most responsive of any projects we have seen during the 25 years of open-source involvement. Their proactivity and helpfulness give us an assurance that TimescaleDB is serious about building an open-source community. All of our StackOveflow questions and Github issue reports, no matter how bad or novice has gone unanswered. We are pretty sure if one were to ask something offtopic, like making a coffee, and tagging with “timescaledb” it would still a receive perfect answer.

    Why did we launch on Ethereum mainnet, Binance Smart Chain and Polygon?

    When we started to build Trading Strategy early 2021, the layer 1 blockchains were not still on such rampage as they are today. Polygon and Binance Smart Chain were the layer 1 top dogs and no layer two was live yet. Ther chains had user adoption and active DEXes like PancakeSwap and QuickSwap. Today we have more competition with the likes of Avalanche, Fantom, Aurora and Telos EVM. Also we have non-EVM based solid solutions like NEAR, Elrond and Solana. We expect to integrate all of them during the source of 2022.

    Ethereum mainnet has the best developer community. However, the Ethereum mainnet transaction costs are prohibitively expensive for the unforeseeable future, and thus it is unsuitable for our active trading strategies.

    What challenges do we see?

    Developing the means failing and retrying a few times, as your first guess is not always right one. We have some good lessons from 2021.

    SvelteKit is still in beta. Some of the aspects of it are still under development and may not have complete documentation or supporting material like tutorial blog posts. We had to figure out a lot of aspects ourselves, especially what comes to SvelteKit server-side rendering speed and tuning. We feel the benefits of SvelteKit developer productivity greatly outweighs some learning curve and contributions to the documentation we had to do ourselves.

    Svelte is new, thus it still does not have Svelte-native feature-rich charting libraries like uPlot and Datatables. They do not integrate to SvelteKit server-side rendering flow, making it not possible to serve pre-rendered pages.

    Hosting Polygon and Binance Smart Chain nodes is tough. Both blockchain teams have issues with developer communications. There are no adequate manuals for running your own node. The expectation of using bug-ridden third-party API services goes against the blockchain ethos

    Some queries on PostgreSQL are still unnecessary complex whereas other databases do better. Often we need to refer to the latest value, like the latest price, either for a single item or for a group. Unfortunately PostgreSQL does not offer any native “latest value” indices and it is often tricky to write an efficient query for this. Sometimes even simple ORDER LIMIT 1 seems to cause issues for PostgreSQL unless you create unnecessary fat indices.

    We are open source

    Trading Strategy frontend has been open source since the day one. If you are new to Svelte / SvelteKit you might find our repository interesting to read and learn why we have made certain design choices.

    The same goes for the Jupyter Python trading strategy client. Oracle code and backend code will be eventually opened, as we start rolling out the protocol network later in 2022.

    We are hiring

    We are currently hiring for frontend (Svelte), backend (Python/PostgreSQL) and quant research (Jupytere Notebook/Pandas) positions. If you are interested to work with cryptocurrencies and algorithmic trading please email us careers@tradingstrategy.ai.

    The cover photo by Alex Chumak.

     Subscribe to RSS feed Follow me on Twitter Follow me on Facebook Follow me Google+

    Categories: FLOSS Project Planets

    Real Python: The Real Python Podcast – Episode #92: Continuing to Unravel Python's Syntatic Sugar With Brett Cannon

    Planet Python - Fri, 2022-01-07 07:00

    A year ago, we had Brett Cannon on the show to discuss his blog series about unravelling Python's syntactic sugar. Brett has written 15 more entries in the series, and he returns to the show this week to continue our conversation. We dive into unravelling 'async' and 'await' statements and their relationship with Python's generators.

    [ Improve Your Python With 🐍 Python Tricks 💌 – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]

    Categories: FLOSS Project Planets

    Mikko Ohtamaa: Building a cryptocurrency site with Svelte, Python and TimescaleDB

    Planet Python - Fri, 2022-01-07 06:59

    This post is the repost of the original Trading Strategy software architecture overview for community feed aggregators. Please read the original post for the best layout and formatting.

    The audience of this post is software developers who are looking to build scalable software-as-a-service solutions and are interested in Svelte, Python and TimescaleDB technologies. Developers who are interested in Web3, Ethereum, cryptocurrency and blockchain technologies will also find this post useful.

    What are Trading Strategy protocol and algorithmic trading?

    Trading Strategy is a new service for algorithmic and technical trading of cryptocurrencies on decentralised exchange (DEXes).

    Algorithmic trading is a derivative of technical analysis; taking trading positions based on pure mathematics and data. Algorithmic trading is part of quantitative finance, the opposite of value investing where trading decisions are made based on fundamentals. Algorithmic trading provides a systematic approach to trading compared to methods based on trader intuition or instinct. Whereas technical analysis often aids humans to take trading positions, in its purest form in algorithmic trading a trading program follows a set of trading rules and independently executes trades on the market 24/7.

    Today, Trading Strategy offers market data feeds for Uniswap compatible exchanges across three different blockchains (Ethereum, Binance Smart Chain, Polygon). We expect to cover all major decentralised exchanges and exchange types on all major blockchains by the end of the year.

    Our mission is to make algorithmic by developing and investing in algorithmic trading strategies easy. Although serving the market data is the first step, Trading Strategy is going to grow beyond the information service website. During the course of 2022, the service will be decentralised, so that the whole software solution, strategy and trade execution will be runnable anyone independently (so-called operating a node).

    You can read more about our future plans in our vision blog post.

    Rich in technical wealth

    Trading Strategy chose modern architecture and the best components of 2021 for its software development, making its codebase high in technical wealth.

    Technical wealth is the opposite of technical debt. As Trading Strategy was able to start as a clean slate project, we had the privilege to pick the latest technologies and build our architecture around these. This enables us to build faster and do changes more dynamically. As an example, a lot of out of the box features offered by TimescaleDB would have taken us months if we had built them ourselves.

    The decentralised finance (DeFi) industry itself is high in technical wealth compared to traditional finance (TradFi). This is due to the use of public ledger (open data), free-as-in-speech codebases (open source) and permissionless public blockchains (open access). This is the opposite of the traditional financial services that are built around closed networks, private APIs and exclusive access. Privileged and siloed software development leads to high maintenance cost long term, as there are no people who are able to work with the code. For references, see this blog post on legacy investment bank software and Google’s woes about maintaining their own Linux kernel with 9000+ in-house patches. Writing financial applications for DeFi is 10x  – 100x more developer productive than writing them for TradFi.

    What is a Web3?

    From the software developer point of view, Web3 refers to backend-free services. No logins or registrations are needed. The user data is not processed and stored on a private server, but a public blockchain where the business logic is wired together using smart contracts. Any transaction, or a “POST request” in the traditional parlay, is initiated by users themselves, using their private key on their locally stored wallet application.

    In this kind of model, there are no sysadmin fraud risks, no data loss risks or data liability risks with user identity information. The user is in 100% control. It is a fairer world where users have more control over the revenue streams they generate. Big IT like Facebook and Google have fewer unfair monetization opportunities on user data.

    Only some services are a good fit for Web3. At the moment Web3 works best for pseudonymous and public data use cases. This is almost all finance, provenance (NFTs), public social media like Twitter and discussion forums and eCommerce.

    Web3 is still early: though most pieces have been figured out in computer science theory, the implementation is still under development. For example, doing database-like traffic (ThreadDB) and storage (Arweave, Storj) can be still considered “alpha” today.

    Software stack overview

    Below is a walkthrough of how the HTTP requesting of Trading Strategy website is set up. Because Trading Strategy application is eventually going to be a Web3-like oracle node in a distributed network, everything built API first. There are no internal APIs – the website uses the same public market data APIs as everyone else.

    Trading Strategy Oracle is a process that indexes blockchain data: DEX trading data, tokens and so on. Oracle and web processes communicate over TimescaleDB. Oracle is responsible for tasks like generating OHLCV candle data, generating liquidity maps and fetching US dollar reference prices. Oracle processes connect to various blockchain GoEthereum nodes that are part of the P2P network for the respective Ethereum Virtual Machine based blockchains.

    Frontend: Why did we choose Svelte?

    Svelte is a new JavaScript frontend framework and an alternative to React, Vue.js and Angular. Svelte comes with an integration package called SvelteKit that adds a standard web server, routing, server-side rendering and other core functionality needed to build a fully functional website.

    We considered React for Trading Strategy . React is the de facto frontend framework choice of the cryptocurrency industry. However, even with our extensive experience in React, we chose Svelte because we believe Svelte is the framework of the future. Svelte offers reactivity with ahead-of-time compiled virtual DOM free approach. Svelte components are very maintanable single files, containing normal HTML template and normal CSS code instead of bastardized “styles-in-JS” or domain-specific templating approaches. Writing reactive logic in Svelte is easier than in other frameworks, due to its elegant design making the most developer-friendly frontend framework.

    SvelteKit takes the developer experience of Svelte even further, by introducing the concepts of file-system based routing, simple server-side rendering and integrated web server (Vite). With SvelteKit’s batteries included approach an application developer spends less time on plumbing, boilerplate code and debugging async reactivity mess This all translates to better efficiency: the codebase is easier to read and maintain due to standardized coding conventions across open source libraries, components are faster to develop and new developers pick up the pace faster.

    We also use components outside Svelte. We use uPlot for charting. Though the TradingView is the most popular JS framework for technical trading, we are puritans that go with 100% open-source approach as we are building for long term. uPlot was the charting library with an open-source license. For our number heavy tables we use DataTable library. For Web3 integration, we use web3.js through svelte-web3.

    Backend: Why did we choose Python, Pyramid and SQLAlchemy?

    Pyramid is a web framework for Python and SQLAlchemy is Python’s most popular ORM. We have experience writing Python applications since 2006 using Django, Flask and Pyramid. We also have experience writing backends in Node.js with various frameworks like Next.js.

    For developers who know several programming languages, Python is superior choice for the backend. Writing Python programs takes fewer keystrokes. Python is the most readable of all programming languages. Optional typing support is a great way to make the code more static when the team grows.

    There is a forever battle with sync vs. async. There is greater maintenance efficiency with colored function free, linear threaded, Python code. Our workloads are computationally sensitive, not IO sensitive, so using async IO would cause more headaches and we would get no benefits out of it.

    We chose Pyramid and SQLAlchemy because we are doing API first backend and complex databasing with our special workload. Trading Strategy currently features tracking of 800k trading pairs (NASDAQ has only 3000). This is not your run of the mill CRUD and admin UI application. For this kind of use case, Pyramid and SQLALchemy are the choice today. This framework combo offers powerful tooling to cover advanced use cases without sacrificing developer productivity or being completely outside of an average backend developer skillset.

    For our API tooling and developer communications we chose OpenAPI 3, also known as Swagger. Integration is mostly cost-free: pyramid_openapi3 validates the API definition, validates requests and replies, and can automatically route payloads to their corresponding endpoints and offers Swagger interactive API explorer. This all saves us a lot of manual development.

    For background workers, we use Dramatiq library with Redis broker. Dramatiq task server is simpler, much easier to understand and maintain than more well-known Celery.

    Data research: Why did we choose Jupyter notebook?

    Most quantitative finance in the world uses Jupyter Notebooks and Python data science libraries like Pandas and Numpy. This is the strongest suite of Python that no other programming language can match. In fact, Pandas was originally developed by an investment bank.

    Trading Strategy algorithm backtesting is done in Jupyter. We offer a Trading Strategy client library so that quants can develop their algos against decentralised exchanges without need to know low level blockchain specific details. If you are interested to see if you can beat the market please see Getting started tutorial (beta warning: better to join our Discord as well.)

    Database: Why did we choose TimescaleDB?

    TimescaleDB is a PostgreSQL extension specialised in time-series data, especially the “big” flavour of it. The alternatives included Clickhouse and xxx.

    We chose TimescaleDB, because they are based on PostgreSQL. During the last 20 years, PostgreSQL has overtaken as the most advanced open-source database. PostgreSQL has the most vibrant database ecosystem on this planet. Tuning PostgreSQL is well-known: there are multiple products and companies to support in-house development.

    Many of the core TimescaleDB features make our life easier. For example, hypertables provide fast insert times on large time-series datasets – otherwise inserting your one-billionth row starts to slow down. Continuous aggregates give us free upsampling 1-minute OHLCV candles to 5 minutes to 30 days periods.

    TimescaleDB completed their Series B funding round where they raise $40M. Based on the quality of their product, the detail they go in their developer communications, we can see why they could be the winning horse of time-series databases.

    TimescaleDB team has been the most responsive of any projects we have seen during the 25 years of open-source involvement. Their proactivity and helpfulness give us an assurance that TimescaleDB is serious about building an open-source community. All of our StackOveflow questions and Github issue reports, no matter how bad or novice has gone unanswered. We are pretty sure if one were to ask something offtopic, like making a coffee, and tagging with “timescaledb” it would still a receive perfect answer.

    Why did we launch on Ethereum mainnet, Binance Smart Chain and Polygon?

    When we started to build Trading Strategy early 2021, the layer 1 blockchains were not still on such rampage as they are today. Polygon and Binance Smart Chain were the layer 1 top dogs and no layer two was live yet. Ther chains had user adoption and active DEXes like PancakeSwap and QuickSwap. Today we have more competition with the likes of Avalanche, Fantom, Aurora and Telos EVM. Also we have non-EVM based solid solutions like NEAR, Elrond and Solana. We expect to integrate all of them during the source of 2022.

    Ethereum mainnet has the best developer community. However, the Ethereum mainnet transaction costs are prohibitively expensive for the unforeseeable future, and thus it is unsuitable for our active trading strategies.

    What challenges do we see?

    Developing the means failing and retrying a few times, as your first guess is not always right one. We have some good lessons from 2021.

    SvelteKit is still in beta. Some of the aspects of it are still under development and may not have complete documentation or supporting material like tutorial blog posts. We had to figure out a lot of aspects ourselves, especially what comes to SvelteKit server-side rendering speed and tuning. We feel the benefits of SvelteKit developer productivity greatly outweighs some learning curve and contributions to the documentation we had to do ourselves.

    Svelte is new, thus it still does not have Svelte-native feature-rich charting libraries like uPlot and Datatables. They do not integrate to SvelteKit server-side rendering flow, making it not possible to serve pre-rendered pages.

    Hosting Polygon and Binance Smart Chain nodes is tough. Both blockchain teams have issues with developer communications. There are no adequate manuals for running your own node. The expectation of using bug-ridden third-party API services goes against the blockchain ethos

    Some queries on PostgreSQL are still unnecessary complex whereas other databases do better. Often we need to refer to the latest value, like the latest price, either for a single item or for a group. Unfortunately PostgreSQL does not offer any native “latest value” indices and it is often tricky to write an efficient query for this. Sometimes even simple ORDER LIMIT 1 seems to cause issues for PostgreSQL unless you create unnecessary fat indices.

    We are open source

    Trading Strategy frontend has been open source since the day one. If you are new to Svelte / SvelteKit you might find our repository interesting to read and learn why we have made certain design choices.

    The same goes for the Jupyter Python trading strategy client. Oracle code and backend code will be eventually opened, as we start rolling out the protocol network later in 2022.

    We are hiring

    We are currently hiring for frontend (Svelte), backend (Python/PostgreSQL) and quant research (Jupytere Notebook/Pandas) positions. If you are interested to work with cryptocurrencies and algorithmic trading please email us careers@tradingstrategy.ai.

    The cover photo by Alex Chumak.

    Categories: FLOSS Project Planets

    Three Ways To Connect Phone And Desktop! ~ The Linux Ecosystem ~

    Planet KDE - Fri, 2022-01-07 05:44
    💸💸 Help me contribute to KDE and do these videos: 💸💸 Patreon: https://www.patreon.com/niccolove Youtube: https://www.youtube.com/channel/UCONH73CdRXUjlh3-DdLGCPw/join Paypal: https://paypal.me/niccolove Stay in the loop: https://t.me/veggeroblog My website is https://niccolo.venerandi.com and if you want to contact me, my telegram handle is [at] veggero.
    Categories: FLOSS Project Planets

    Krita 5.0.2

    Planet KDE - Fri, 2022-01-07 05:06

    Hot on the heels of Krita 5.0.0, we’re releasing the first bugfix release of Krita 5! It’s 5.0.2 because if you upload a beta with the version number 5.0.0 to the Windows Store, you cannot upload 5.0.0 final, but it has to be 5.0.1… So, don’t worry, you didn’t miss 5.0.1!

    This release contains the following fixes:

    • Fix a crash when changing the Instant Preview setting of a brush preset.
    • Fix a crash when there are ABR brush libraries present with an uppercase ABR extension. BUG:447454
    • Fix a similar issue with Krita resource bundles with an upper case .BUNDLE extension
    • Fix the macOS entitlements to allow uploading Krita to the Steam Store
    • Fix the macOS entitlements so Krita can be accepted by the MacOS App Store
    • Make Krita use the native macOS file dialog by default
    • Remove the tkInter module from the embedded Python libraries on macOS.
    • Fix rendering 16 bit integer images on macOS on the M1 architecture
    • Fix a crash when undoing multiple layer operations too quickly. BUG:447462
    • Workaround a crash when a transform mask is applied to a passthrough group. BUG:447506
    • Filter out two new Epic Store single-dash-multi-character commandline options. Really, Epic, it’s bad for to pass commandline parameters in this format!
    • Fix toolbox arrow buttons not visible on starting Krita
    • Fix the photoshop compatibilty shortcut profile. BUG:447771
    • Fix bundling AppimageUpdate into appimages.
    • Restore the QImageIO fallback for loading WebP images
    • Make the dock widget titlebars so they can be smaller
    • Disable all accelerator keys for dockers
    • Fix a race condition in the image metadata system
    • Fix the tool option widget’s layout sporadically going wrong. BUG:447522
    • Update fill layers correctly when changing the options from a Python script. BUG:447807
    • Fix the built-in file dialog’s image preview. BUG:447806
    • Fix the slowness opening and closing documents if there are many resource bundles present. BUG:447298
    • Fix clicking external urls on Android
    • Work around a possible crash on Android due to bugs in Qt’s Accessibilty framework.
    • Fix importing bundles on Android
    • Work around issues with file permissions not being set correctly by ChromeOS

    Krita is a free and open source project. Please consider supporting the project by joining the development fund, donating or by buying training videos! With your support, we can keep the core team working on Krita full-time. Download Windows

    If you’re using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.

    Note that we are not making 32 bits Windows builds anymore.

    Linux

    The separate gmic-qt appimage is no longer needed.

    (If, for some reason, Firefox thinks it needs to load this as text: to download, right-click on the link.)

    macOS

    Note: if you use macOS Sierra or High Sierra, please check this video to learn how to enable starting developer-signed binaries, instead of just Apple Store binaries.

    Android

    We consider Krita on ChromeOS as ready for production. Krita on Android is still beta. Krita is not available for Android phones, only for tablets, because the user interface needs a large screen.

    Source code md5sum

    For all downloads:

    Key

    The Linux appimage and the source .tar.gz and .tar.xz tarballs are signed. You can retrieve the public key here. The signatures are here (filenames ending in .sig).

    The post Krita 5.0.2 appeared first on Krita.

    Categories: FLOSS Project Planets

    Pages