Language Selection

English French German Italian Portuguese Spanish


Programming Leftovers

Filed under

  • Joachim Breitner: A Candid explainer: Language integration

    Now for something completely different: How does Candid interact with the various host languages, i.e. the actual programming languages that you write your services and clients in?

  • Introduction to the QML CMake API

    When Qt 6 migrated to CMake, we also wanted to provide a nicer experience for setting up QML projects. With the initial Qt 6.0 release, we did however only provide some tech preview API, which did not do much more than what was available in qmake since Qt 5.15.

  • Translation Sadness

    Qt comes with translations for many things; applications can organize their translations into catalogs. To display a text, Qt applications will typically use the tr() function to look up a source-text and return a translation in the current language. For instance, tr("OK") will return the translation of “OK”.

    Translations have a context, which in the case of a naive call to tr() is generally the class name performing the call. This gives the translations at least the opportunity to change the way “OK” is translated in the context of classes MyFancyWidget or MyAwkwardDialog.

    So a catalog will basically be a table, helping to look up string in context to produce a translation.


    My remaining sadness is that Qt is almost there, and documentation says that it should all work, and that in the end I need to pull off some stupid hack to provide the right display of a 2-character string (2 glyphs in Simplified Chinese, 5 in Turkish). At least it’s documented, and the next time someone files an issue that there’s a missing translation I have a handle on what kind of code to add.

  • What was your first programming language?

    My first ever programming language was BASIC in the early eighties. One of my relatives bought a C64 for their kids to get started with learning computers. They only used it for gaming, and I was also invited. But they also had a book about BASIC, and I was curious and gave it a try. I wrote some short code, I did not even know how to save it, but it was exciting to see that the computer does what I say to it. This means that I was not paid to learn it, and it was not my choice. It was the language available to me. Obviously, when I got my first computer a few years later, an XT compatible box, I first wrote some code in GW-BASIC, the dialect of BASIC available with DOS.

  • Programming languages: Python is on the verge of another big step forward

    Tiobe, a software testing company, bases its rankings on searches for programming languages on popular websites and search engines. The Tiobe index is updated monthly, and it doesn't align with other language popularity rankings. For example, the electrical engineering magazine IEEE Spectrum has ranked Python as the most popular language since at least 2020, followed by Java, C, and JavaScript, while developer analyst RedMonk has JavaScript in top place, followed by Python and Java, and places C at tenth.


  • Rakudo Weekly News: 2021.37 Receding

    This week not a lot happened, so it seemed. It feels a bit like the waters receding from the beach, just minutes before the tsunami is going to hit.

GDB 11.1 released!

Filed under

            GDB 11.1 released!

Release 11.1 of GDB, the GNU Debugger, is now available.  GDB is
a source-level debugger for Ada, C, C++, Fortran, Go, Rust, and many
other languages.  GDB can target (i.e., debug programs running on)
more than a dozen different processor architectures, and GDB itself
can run on most popular GNU/Linux, Unix and Microsoft Windows variants.
GDB is free (libre) software.

You can download GDB from the GNU FTP server in the directory:

The vital stats:

  Size   md5sum                            Name
  22MiB  257cb0f67927f79acf636d8c01e19990  gdb-11.1.tar.xz
  37MiB  eb6596d83bdccea06caa6d49d923e119  gdb-11.1.tar.gz

There is a web page for GDB at:

That page includes information about GDB mailing lists (an announcement
mailing list, developers discussion lists, etc.), details on how to
access GDB's source repository, locations for development snapshots,
preformatted documentation, and links to related information around
the net.  We will put errata notes and host-specific tips for this release
on-line as any problems come up.  All mailing lists archives are also
browsable via the web.

Read more

Programming Leftovers

Filed under
  • How can I encrypt/protect JavaScript source code

    JavaScript is the most popular web programming language that comes with a lot of useful features. One of these features is immediate parsing i.e the browser executes the code as it downloads the content. This makes it browser interpreted or client side programming language. Therefore, it works on the client machine and hence making it difficult to hide the code from the client.
    Immediate parsing has its perks but it also comes with major downsides. As the source code is easily visible, everyone can read it. This can cause major security risks and hence the code needs to be protected.

    Sometimes you want to protect your JavaScript code from hackers, and sometimes you want to showcase an application but at the same time you don’t want your code to be copied. In this article, we’ll learn how to protect your JavaScript code and decrease the security risk.

  • How to Show or Hide an Element on Website using JavaScript

    Throughout web development, users need to hide or show some elements. These elements can be a button, some animation, or a navigation bar etc. Most of the time the user wants a button or a navigation bar to be visible for the desktop viewpoint but not for the mobile viewpoint.

    With JavaScript, users can easily hide or show an element on the webpage, depending on the behavior of the user. In this article we’ll see how JavaScript is used for this purpose.

  • How to Remove Elements from an Array in JavaScript

    Arrays allow us to store similar kind of data in a single variable. We can then iterate over the data stored in the arrays and perform different functions to manipulate the data according to our needs. A single piece of data in an array is known as its element. JavaScript gives us the option to add and remove elements from an array after we have declared and initialized it. In this post we will only focus on the methods which can be used removing an element from an array.

    JavaScript provides numerous methods which can be used to remove array elements; In this post we will discuss four such methods.

  • How to Loop/Iterate Through an Array in JavaScript

    Loops are key components of every programming language. They are used to run the same code or logic again and again in a cycle. Usually loops have an index value which is different each time the loop repeats. There are different kinds of loops available in JavaScript which help us iterate over an array. An array is a collection that is used to store different elements;

  • How to Minify (Compress) JavaScript Code

    To compress or minify a code means removing all the irrelevant characters from your source code without changing its functionality. These characters include white spaces, comments, new line characters, semicolons etc. But why is minimization of your code necessary? Well, it reduces the size to lesser kilobytes. Hence, making the loading of your website faster and providing the user an amazing experience.

    Various developers write well structured code with spaces and comments. This makes their code understandable. But, at the same time it creates extra space and hence increases the load time.

    This is why minimization of code is extremely useful in JavaScript as it reduces the size of the page. This minimized version provides better functionality without any additional network traffic.

  • How to Read, Write and Parse JSON in JavaScript

    The full form for JSON is JavaScript Object Notation and it is derived from the JavaScript programming language. A standard text format that defines the structured data is based on JavaScript object syntax. Transmission of data in web applications takes place through JSON. Have you heard about JavaScript object literal syntax? Yeah, JSON resembles it in a close manner. We are not limited to use it always with JavaScript.

  • How Do I Delete a Specific Row in PostgreSQL?

    Whenever we talk about the data storage of any website or application, postgresql comes to our mind. This database supports both JSON and SQL querying. Postgresql is customizable, and you can add many services and plugins you think are not present in postgresql, and you need them for your project. If you want to select specific rows to be deleted, postgresql allows you to use the command having Delete statement with “where” command. We have quoted a sequence of examples here in psql and pgAdmin as well.

  • Can You Delete a Vector in C++?

    Yes! Yes, but it does not go without constraints. There are two ways of deleting a vector. Again they do not go without constraints. One way of deleting a vector is to use the destructor of the vector. In this case, all the elements are deleted, but the name of the vector is not deleted. The second way to delete a vector is just to let it go out of scope. Normally, any non-static object declared in a scope dies when it goes out of scope. This means that the object cannot be accessed in a nesting scope (block). A nesting scope is an outer scope (block). A nested scope is an inner scope, which is still part of the scope of interest. These two ways of deleting a vector are discussed in this article.

  • C++ Vector Clear vs Erase

    The C++ vector has many member functions. Two of them are clear() and erase(). clear() “removes” all the elements of the vector. erase() “removes” a single element or a range of elements. There are two overloaded variants of the erase() member function for the vector.

    The title of this article is actually “Vector clear() Member Function versus Vector erase() Member Function, in C++”. This is a comparison of the two-member functions. It deals with when to use which, how to use which, and under which conditions either is used.

  • How I rediscovered Logo with the Python Turtle module |

    When I was in high school, one of the very first programming languages I was introduced to was Logo. It was interactive and visual. With basic movement commands, you could have your cursor (“turtle”) draw basic shapes and intricate patterns. It was a great way to introduce the compelling concept of an algorithm—a series of instructions for a computer to execute.

  • Russ Allbery: DocKnot 5.00

    This release is the culmination of a project that I've been wanting to do for two years, but nearly all the work was done in the past week. That experience made me rethink some of my skepticism, but I'll get to that part of the story later.

    In March of 1999, I got tired of writing HTML by hand and wrote a small program called spin that implemented a macro language that translated into HTML. This makes it one of the oldest programs for which I have a continuous development history, predating podlators by three months. I think only News::Gateway (now very dormant) and Term::ANSIColor (still under active development but very stable) are older, as long as I'm not counting orphaned packages like newsyslog.

    I've used spin continuously ever since. It's grown features and an ecosystem of somewhat hackish scripts to do web publishing things I've wanted over the years: journal entries like this one, book reviews, a simple gallery (with some now-unfortunate decisions about maximum image size), RSS feeds, and translation of lots of different input files into HTML. But the core program itself, in all those years, has been one single Perl script written mostly in my Perl coding style from the early 2000s before I read Perl Best Practices.

GNU Radio Decodes Voyager Data

Filed under

With the 44th anniversary of the launch of Voyager I, [Daniel] decided to use GNU Radio to decode Voyager data. The data isn’t live, but a recording from the Green Bank Telescope. The 16 GB file is in GUPPI format which stores raw IQ samples.

The file contains 64 frequency channels of just under 3MHz each. The signal of interest is in one channel, so it is easy to just throw away the rest of the data.

A Python block manipulates the file and provides a data source. Once you have that, the rest is pretty standard processing although, as you might expect, the signal is weak even with a 100 meter antenna. Large Fourier transforms do the trick.

Then it is a matter for decoding, although there are some obscure keys needed to pull the data out correctly. In the end, it all shows up and it is a great detective story of how to go through the data step-by-step.

Read more

Programming Leftovers

Filed under
  • PostgreSQL JSON Functions

    JSON is an open-style JavaScript Object Notation used only for pairs of key-value data within the PostgreSQL database. JSON consists of many operators and functions to query the JSON information or data. In this article, we will demonstrate the working of JSON functions on some JSON data within the PostgreSQL tool. To work on JSON functions, one must have some JSON data in the database. Make sure you have PostgreSQL pgAmdin 4 installed and configured on your Windows 10 system because we have been implementing this article at Windows 10 on the PostgreSQL pgAdmin 4. Open your PostgreSQL Graphical user interface, e.g., pgAdmin, from the start bar of Windows 10 by searching it thoroughly. After that, it may require your master password and server password to get into it one after another. After adding the password, you have to tap on any database listed within the list of Servers and open the query tool to add some commands.

  • How to encode or decode a string using base64 in JavaScript

    Base64 encoding is an interesting way of representing information which is used to transform binary data into a string consisting of alphabets, digits and some special characters.
    Base64 is typically used to encode data that may be corrupted during transfer. Before eight bit bytes became a standard many systems such as SMTP (Email) used seven, six and even three bit bytes which led to data being lost during transfer between systems. So a new encoding scheme was developed which represented binary data in the form of text strings which could easily be transferred between systems without any damage to the data.

    Base64 is commonly used to encode the binary data of email attachments such as images and documents. It is also used to encode the images and audio files embedded in a webpage.

  • How to create a countdown timer in JavaScript

    Countdown timers are a kind of a virtual clocks which count the time until a specific date to mark the start or end of a special occasion. They were mostly used on the landing page of new upcoming websites but now they have found their way into e-commerce websites.

    The “time is running out” element on the countdown pages helps create urgency to generate more conversions on E-commerce websites. Timers can also be used on websites or blogs in order to display a countdown for special events i.e. anniversaries, birthdays, meetings etc. Countdown timers can also be used to count down the time till an offer becomes available

  • How to Convert a Number into a String in JavaScript

    Management of Data is a crucial task for any programmer; JavaScript is a very versatile programming language which offers multiple built-in methods to convert data into different data types. The .tostring() is one of these methods. The .tostring() method can be used to convert the data type of a variable from a number to a string. In this how-to guide we will learn to convert a number into a string using the .tostring() method in JavaScript.

Mozilla and Programming Leftovers

Filed under
  • Matrix 4, Blue’s Clues, #StarTrekDay and More — Everything That’s Old is New Again in This Week’s Top Shelf [Ed: Mozilla has nothing of value left to say. So, here are some 'tweets'...]
  • Spidermonkey Development Blog: SpiderMonkey Newsletter (Firefox 92-93)

    SpiderMonkey is the JavaScript engine used in Mozilla Firefox. This newsletter gives an overview of the JavaScript and WebAssembly work we’ve done as part of the Firefox 92 and 93 Nightly release cycles.

  • Dear open source developers

    Nowadays, regularly, more operating systems are dropping support for older architectures to only focus on amd64. This is understandable, volunteer work is limited and it's important to focus on the hardware found in most of the users computers. But then, by doing so they are making old hardware obsolete which is not acceptable.

    I understand this is a huge dilemma and I have no solution, maybe we should need less operating systems to gather the volunteers to maintain older but still relevant architectures. It is not possible obviously, volunteers work on what they want because they like it, you can't assign contributors to some task against their will.

    The issue is at a higher scale and every person working in the IT field is part of the problem.

  • Quadratic algorithms are slow (and hashmaps are fast)

    Hello! I was talking to a friend yesterday who was studying for a programming interview and trying to learn some algorithms basics.

    The topic of quadratic-time vs linear-time algorithms came up, I thought this would be fun to write about here because avoiding quadratic-time algorithms isn’t just important in interviews – it’s sometimes good to know about in real life too! I’ll explain what a “quadratic-time algorithm is” in a minute Smile


    The weird thing about quadratic time algorithms is that when you run them on a small number of elements (like 1000), it doesn’t seem so bad! It’s not that slow! But then if you throw 1,000,000 elements at it, it can really take hours to run.

    So I think it’s worth being broadly aware of them, so you can avoid writing them by accident. Especially if there’s an easy way to write a linear-time algorithm instead (like using a hashmap).

Programming and Standards

Filed under
  • 5 Programming Languages you must know

    Once upon a time, a few people were thought to be software engineers with cutting-edge coding skills. Currently, a good command of many programming languages is required for a variety of IT jobs. If you want to advance in your career or change careers completely, you may be considering which programming language to study.

    Given that learning a language will take time and money, you must choose wisely. A few considerations, for example, the difficulty level you're willing to learn, the information you already have that corresponds to your present coding talents, or your motivation for learning a top programming language, all play a role in your decision.

  • Five things to know before learning Python | Red Hat Developer

    Getting started with a new programming language can be challenging. Whether you're a beginner or a grizzzled veteran, there are a number of larger context questions to answer that go beyond simply learning the language's syntax. This article provides a high-level overview of five important things to keep in mind as you begin your journey into Python. You won't learn the specifics of the language here, but you'll gain a general picture of how Python works.

  • Habana Labs Opens Up The Code To Their AI Compiler, SynapseAI Core

    Intel-owned Habana Labs now has the most open software stack among AI accelerators! While Habana Labs has long provided an open-source, upstream kernel driver for their Gaudi AI training and Goya AI inference accelerators, the user-space portions including their code compiler and run-time library have been closed-source. This has been a thorn for upstream kernel developers and their standards, but now Habana Labs has open-sourced their user-space components too.

  • Six Standards Recommendations for the Biden Administration

    Adopting an enlightened standards policy could greatly advance the national interest in the area of information and communications technology (ICT) standards. And at no time in recent memory has the need to do so been more urgent, as trade tensions with China sustain rather than abate. Absent a change in direction in policy, there is the potential for standards wars between East and West in areas such as 5G technology.

    Maintaining a healthy standards development ecosystem domestically is equally important, as standards setting organizations (SSOs) annually create hundreds of standards that are referenced into law, at great savings in time and tax dollars when compared to the costs of drafting regulations within the government.


    With the exception of specific treaty obligations, international adoption of standards is entirely voluntary and market driven. Competing standards can, and often have, been used as competitive weapons, both to exclude or burden foreign products or to avoid licensing costs associated with “standards essential patents” (SEPS). While both the US and China are signatories of the World Trade Organization Treaty on Technical Barriers to Trade (TTBT), which bars signatory nations from adopting local standards where suitable global standards have become widely adopted, this did not prevent China from launching its own wireless standard (WAPI) in competition with Wi-Fi a decade and a half ago, alleging that the Wi-Fi standard developed by the IEEE provided insufficient security.

    The WAPI standard was encumbered by many SEPS owned by Chinese companies (as, indeed, the competing Wi-Fi standard was encumbered by SEPS owned by Western companies). Licenses to those standards were available only to certain Chinese companies. China also developed its own 4G standard (CDMA) in competition with two Western contenders. With the largest population in the world, China was able to use its competing standards to the benefit of its domestic vendors. It has every incentive to do the same now if trade tensions between the US and China do not lessen.

    Significantly, Huawei is recognized as owning more 5G patents than any other company in the world. It is also believed to have been a member of c. 400 SSOs, many of which ejected Huawei or suspended its participation after it was placed on the Entity List. The intellectual property rights (IPR) policies of virtually all of these SSOs require participants to either license their SEPS on “reasonable and non-discriminatory” (RAND) terms, or to disclose them so that an attempt can be made to revise the related standards to avoid infringement. But this obligation only attaches to companies participating in the working groups that create the standards.

Programming Leftovers

Filed under
  • What they don’t tell you when you translate your app

    I recently had the privilege of helping a client with localization efforts for their website. There are some things I did not run into in my web research that I learned in actually doing the work, things that I feel are worth capturing and sharing: [...]

  • How to add elements into an array in JavaScript

    Arrays are data structures which are used to keep multiple values in a variable. A single JavaScript array can have multiple element types stored in it. It can be modified even after it has been declared and initialized. JavaScript arrays offer a lot of built-in methods which can be used to access and manipulate data stored inside them.

    In this how-to guide we will discuss four different methods which can be used to add elements into JavaScript arrays.

  • Dirk Eddelbuettel: RcppSMC 0.2.5 on CRAN: Build Update

    A week after the 0.2.5 release bringing the recent Google Summer of Code for RcppSMC to CRAN, we have a minor bug-fix release consistently, essentially, of one line. “Everybody’s favourite OS and toolchain” did not know what to make of pow(), and I seemingly failed to test there, so shame on me. But now all is good thanks to proper use of std::pow().

    RcppSMC provides Rcpp-based bindings to R for the Sequential Monte Carlo Template Classes (SMCTC) by Adam Johansen described in his JSS article. Sequential Monte Carlo is also referred to as Particle Filter in some contexts. The package now features the Google Summer of Code work by Leah South in 2017, and by Ilya Zarubin in 2021.

  • How do you append to a Vector in C++?

    Appending to a vector means adding one or more elements at the back of the vector. The C++ vector has member functions. The member functions that can be used for appending are: push_back(), insert() and emplace(). The official function to be used to append is push_back(). The use of these three member functions to append to a C++ vector is explained in this article.

  • How Do You Find Something in a Vector in C++?

    C++ vector does not have a find member function. However, the algorithm library has a find() function of different types that can be used to find something in a C++ vector. The algorithm library has four groups of find() functions that can be classified as Find, Find End, Find First, and Adjacent Find.

Programming Leftovers

Filed under
  • The Joy Of Limitations: Writing an ARexx REPL in ARexx

    I like limited computers. Of course all computers are limited in some sense: there's finite amounts of memory, disk space and screen real estate on all machines. When I'm talking limited, I usually mean home computers made during the 1990s and 1980s, machines that are now far surpassed by even the cheapest system on a chip.

    There are several reasons for this. One is familiarity: they're the type of machines I started my computing career on. Having used them and the software they run for three decades means that sitting down in front of one feels like coming home.

    Another one is scale: simpler machines are, well, simpler. When resources are scarce, there's less room for overengineered bloat, telemetry collection, "trusted computing" and other frivolities. More importantly, simple things are easier to understand, learn and remember.

  • Porting NU-Prolog (c. 1995) from BSD Unix to modern Linux

    NU-Prolog is a Prolog variant designed by the members of the Machine Intelligence Project at the University of Melbourne, released circa 1986, with a version 1.6.9 released circa 1995.

    Recently, I sought to port some software written in NU-Prolog (written by one of its creators, Lee Naish). Due to NU-Prolog's unique features, not found in contemporary free Prolog implementations such as GNU Prolog or SWI-Prolog, this pointed to porting NU-Prolog to modern systems as the easiest approach.

  • C++ Programming examples

    C++ is one of the popular programming languages to develop different types of applications. The application developed by this language is portable, which means the C++ application developed in Windows operating can be executed in Linux operating system without any change. It supports both structured and object-oriented programming. This tutorial has designed for those learners who are new users of C++ programming and want to learn from the basics. 40 C++ easy examples have been shown in these tutorials.

  • Can You Make a Vector of Vectors in C++?

    Yes! Yes, you can make a vector of vectors in C++. The normal vector is a one-dimensional list data structure. A vector of vectors is a two-dimensional list data structure, from two normal vectors. A 2-dimensional list is a table, without a proper header row and without a proper header column. A vector of vectors is one vector nesting other vectors. The template argument for the outer vector, is a vector. And so, a vector of vectors can only be of one type, e.g., all integers or all characters.

  • Python Is Integer

    This notebook explains how to check in Python if a number is a integer.

    There are multiple ways to check for integer in Python 2 and Python 3.

  • Cooperative package management for Python []

    A longstanding tug-of-war between system package managers and Python's own installation mechanisms (primarily pip, but there are others) looks on its way to being resolved—or at least regularized. PEP 668 ("Graceful cooperation between external and Python package managers") has been created to provide ways for the two types of package installation to work together, rather than at cross-purposes at times. Since many operating systems depend on Python tools, with package versions that may differ from those of users' Python applications, making them play together nicely should result in more stable systems.

    The root cause of the problem is that distribution package managers and Python package managers ("pip" is shorthand to refer to those throughout the rest of the article) often share the same "site‑packages" directory for storing installed packages. Updating a package, or, worse yet, removing one, may make perfect sense in the context of the specific package manager, but completely foul up the other.

  • This Week In Rust: This Week in Rust 407
  • How the JVM uses and allocates memory | Red Hat Developer

    This is the second article in a series that explains garbage collection in Java and how to tweak it for optimal Java application performance. The previous article introduced the stages and levels of garbage collection (including generational garbage collection) and showed how to check garbage collection behavior in your applications. This article goes into more depth about memory use in the Java Virtual Machine (JVM) and how to control it.

  • Break and Continue statements in JavaScript

    Do you ever feel stuck at some point in life where you just want to get rid of a moment or an instance? When you just want to skip some moments and then go with the flow? That might not be possible in real life but it’s possible in programming languages like JavaScript by using break and continue statements.

    These statements are known as Loop Control Statements; We are going to explain the break as well as continue statements in this article. We will make sure that everything about both of the concepts is delivered properly and in a precise way.

  • JavaScript Event Handlers

    In JavaScript, an event is an action that occurs on a webpage inside the browser. This action can be typing in a field, clicking a button, or loading a page. The actions can either be initiated by the browser or the user; when any action occurs on a web page the browser notifies the system that an event has occurred. Developers can then respond to these events by writing functions that are known as event handlers.Event handlers are functions that listen for a specific type of event and when that event occurs they execute a block of code.

  • Data Types in JavaScript? – Explained for Beginners

    Every value is always distinct from each other, which categorizes them into various types. This categorization of various data is called Data Type. The reason for categorizing the data is to ensure how the data is being used within the program.

    Like any other programming language, JavaScript also consists of various data types. Data Type is dynamic in JavaScript, which means a single value can be stored in various ways.

  • How to write Comments in JavaScript code

    Comments are notes that a programmer leaves in their code to make it more understandable. Most senior devs focus on writing code which is efficient and can be easily read and interpreted by computers. However it is of equal importance to make the code easily readable for the people (who will be working with the code in future) as well. A programmer must know how to properly structure code to make it more understandable for humans.

  • How to read and write text into a file using JavaScript?

    In this article, we are going to talk about how to read or write text to a file in JavaScript. If you are a JavaScript developer you know that one cannot save a file locally as it can create massive security problems.

    Another method would be saving the file on our server. For this, we have to pass all the text data in our file to our server. After this, we have to use the server-related server-side language due to which we will be able to execute the written code in the file. Apart from this, we can also store the file on the client-side. An example would be using cookies to store the information.

Defining an Inkscape Contributor

Filed under

When Inkscape was started, it was a loose coalition of folks that met on the Internet. We weren’t really focused on things like governance, the governance was mostly who was an admin on SourceForge (it was better back then). We got some donated server time for a website and we had a few monetary donations that Bryce handled mostly with his personal banking. Probably one of our most valuable assets, our domain, was registered to and paid for by Mentalguy himself.

Realizing that wasn’t going to last forever we started to look into ways to become a legal entity as well as a great graphics program. We decided to join the (then much smaller) Software Freedom Conservancy which has allowed us to take donations as a non-profit and connected us to legal and other services to ensure that all the details are taken care of behind the scenes. As part of joining The Conservancy we setup a project charter, and we needed some governance to go along with that. This is where we officially established what we call “The Inkscape Board” and The Conservancy calls the Project Leadership Committee. We needed a way to elect that board, for which we turned to the AUTHORS file in the Inkscape source code repository.

Today it is clear that the AUTHORS file doesn’t represent all the contributors to Inkscape. It hasn’t for a long time and realistically didn’t when we established it. But it was easy. What makes Inkscape great isn’t that it is a bunch of programmers in the corner doing programmer stuff, but that it is a collaboration between people with a variety of skill sets bringing those perspectives together to make something they couldn’t build themselves.

Who got left out? We chose a method that had a vocational bias, it preferred people who are inclined to and enjoy computer programming. As a result translators, designers, technical writers, article authors, moderators, and others were left out of our governance. And because of societal trends we picked up both a racial and gender bias in our governance. Our board has never been anything other than a group of white men.

We are now taking specific actions to correct this in the Inkscape charter and starting to officially recognize the contributions that have been slighted by this oversight.

Read more

Syndicate content

More in Tux Machines

Type Title Author Replies Last Postsort icon
Story Kernel: Nintendo, Bcachefs, Lavapipe Roy Schestowitz 27/09/2021 - 3:31pm
Story Top 21 Favorite Self-hosted Photo Collection and Web-based Galleries [2021] Roy Schestowitz 27/09/2021 - 3:19pm
Story Testing The New ASUS Platform Profile Support In Linux 5.15 Rianne Schestowitz 27/09/2021 - 2:56pm
Story Android Leftovers Rianne Schestowitz 27/09/2021 - 2:52pm
Story Dialect: An Open-Source Translation App for Linux Rianne Schestowitz 27/09/2021 - 2:45pm
Story My 2009 LG laptop is running KDE neon Rianne Schestowitz 27/09/2021 - 2:42pm
Story Red Hat Satellite 6.10 Beta is now available Rianne Schestowitz 27/09/2021 - 2:39pm
Story New Issue of Linux Magazine (Paywall) Roy Schestowitz 27/09/2021 - 2:20pm
Story today's howtos Roy Schestowitz 27/09/2021 - 1:55pm
Story Games: Steam Deck, Retro, and Hero.EXE Roy Schestowitz 27/09/2021 - 1:50pm