Language Selection

English French German Italian Portuguese Spanish

Development

Maui Report – 15

Filed under
Development
KDE

Maui 2 was released a month 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 or so months of development.

What’s new?

Among many bug fixes that will be listed below for each individual app, some of the highlights include better support for client-side decorations aka CSD. Clip, the video player, is now working again on Android; MauiKit Controls now provide improved contextual menu actions and a lighter tab bar styling. Index, the file manager, can now also preview PDF documents, adding up to support for previews of text, video, audio and fonts file types; and translucency support is now embedded into MauiKit itself.

Read more

Better Support & Performance For OpenACC Kernels Is Coming To GCC

Filed under
Development
GNU

While the GNU Compiler Collection has supported OpenACC for a few years now as this parallel programming standard popular with GPUs/accelerators, the current implementation has been found to be inadequate for many real-world HPC workloads leveraging OpenACC. Fortunately, Siemens has been working to improve GCC's OpenACC kernels support.

GCC's existing OpenACC kernels construct has been found to be "unable to cope with many language constructs found in real HPC codes which generally leads to very bad performance." Fortunately, improvements are on the way and could potentially be mainlined in time for next year's GCC 12 stable release.

Read more

Bash Programming

Filed under
Development
GNU
  • Bash While And Until Loop Explained With Examples - OSTechNix

    This is a continuation article in bash loop wherein the previous article we have explained about for loop. In this article, we will take a look at two more bash loops namely, while and until loop.

    The while loop is mostly used when you have to read the contents of the file and further process it. Reading and writing to a file are common operations when you write bash scripts. We will see how to read files using a while loop.

  • Bash Scripting - For Loop Explained With Examples - OSTechNix

    In Bash shell scripting, Loops are useful for automating repetitive tasks. When you have to repeat a task N number of times in your script, loops should be used. There are three types of loops supported in bash.

  • 2 Bash commands to change strings in multiple files at once | Enable Sysadmin

    Think about some situations when you need to change strings in text files in your Linux hosts.

    Depending on the case, you will simply change the file directly in your favorite text editor.

Today's HowTos and Programming Leftovers

Filed under
Development
HowTos
  • Attempt to install Fedora WKS 35 Beta as KVM Guest
  • How to install Natron on Linux Lite 5.4 - Invidious

    In this video, we are looking at how to install Natron on Linux Lite 5.4.

  • How to install Super Mario 127 on a Chromebook

    Today we are looking at how to install Super Mario 127 on a Chromebook. Please follow the video/audio guide as a tutorial where we explain the process step by step and use the commands below.

    If you have any questions, please contact us via a YouTube comment and we would be happy to assist you!

  • Everyone’s a (Perl) critic, and you can be too!

    The perlcritic tool is often your first defense against ​“awk­ward, hard to read, error-​prone, or uncon­ven­tion­al con­structs in your code,” per its descrip­tion. It’s part of a class of pro­grams his­tor­i­cal­ly known as lin­ters, so-​called because like a clothes dry­er machine’s lint trap, they ​“detect small errors with big effects.” (Another such lin­ter is perltidy, which I’ve ref­er­enced in the past.)

  • Structural pattern matching in Python 3.10

    In the meantime, I thought I’d get to know the feature better by writing up my thoughts and some code examples in article form. As you can gather, I’m rather biased, but I’ll try to present the positives as well as just criticism.

    The pattern matching feature has no fewer than three PEPs (Python Enhancement Proposals) to describe it: [...]

  • Emmanuele Bassi: Properties, introspection, and you

    It is a truth universally acknowledged, that a GObject class in possession of a property, must be in want of an accessor function.

    The main issue with that statement is that it’s really hard to pair the GObject property with the accessor functions that set the property’s value, and retrieve it.

    From a documentation perspective, tools might not establish any relation (gtk-doc), or they might require some additional annotation to do so (gi-docgen); but at the introspection level there’s nothing in the XML or the binary data that lets you go from a property name to a setter, or a getter, function. At least, until now.

    GObject-introspection 1.70, released alongside GLib 2.70 and GNOME 41, introduced various annotations for both properties and methods that let you go from one to the other; additionally, new API was added to libgirepository to allow bindings to dynamic languages to establish that relation at run time.

Programming Leftovers

Filed under
Development

  • The cmake-project Script

    If you ever need to create a project around a single C++ file (or just a few C++ files) in CMake, as you might for quick test cases, you might find it tedious to write a CMakeLists.txt file by hand every time. To make this easier, I’ve written a script called cmake-project that you can use to generate an initial CMakeLists.txt for you. Similar to qmake -project, it allows you to quickly create a project around a single or just a few C++ files. In addition, it automatically adds a link to Qt Widgets when the code uses QApplication.

    A few special features that come with CMake are support for many languages (like Fortran, CUDA, and Objective-C), native support from many IDEs (Qt Creator and Visual Studio XCode), many active contributors, many out-of-the-box configuration checks, use of non-recursive make for faster build times, and out-of-the-box support for Ninja for even faster build times. These features are a few of the reasons why Qt 6 switched from QMake to CMake.

    Add the cmake-project script on top of all these fantastic features and you can enjoy the only feature people miss from QMake while working in CMake. In turn, your productivity will be better than ever!

  • Linux X86 Assembly – How To Test Custom Shellcode Using a C Payload Tester

    In the last blog post in this series, we created a tool to make it easy to build our custom payloads and extract them. However, what if we want to test them before trying to use them? It seems like a good idea to make sure it works before you include it in an exploit. Testing it first would at least let you know that it works and reduce troubleshooting surface if the exploit fails. Today we are going to focus on building a payload tester stub in the C programming language. This will make it easy for us to copy and paste our C-style formatted payload from our build-and-extract tool. Once it’s pasted in the tester stub, just compile and run it and you will be able to see your payload in action. The code for payload tester stub and Makefile can be found in the /utils/ folder of the Secure Ideas Professionally Evil x86_asm GitHub repository.

  • Developer diaries: The case of the lunchtime interruption

    In this episode of our Developer Diaries series, JJ & Chris do a bit of pair programming to show how developers can use Instana for observability-driven development.

  • SPVM 0.9014 Release - add class, method, static keyword, omit SPVM:: namespace

    I release SPVM 0.9014. Latest releases have some big changes.

    add class, method, static keyword, omit SPVM:: namespace, and remove sub, self, keyword.

  • 3 ways to test your API with Python | Opensource.com

    In this tutorial, you'll learn how to unit test code that performs HTTP requests. In other words, you'll see the art of API unit testing in Python.

    Unit tests are meant to test a single unit of behavior. In testing, a well-known rule of thumb is to isolate code that reaches external dependencies.

    For instance, when testing a code that performs HTTP requests, it's recommended to replace the real call with a fake call during test time. This way, you can unit test it without performing a real HTTP request every time you run the test.

Programming Leftovers

Filed under
Development
  • The final guide to web scraping with Node.js

    Web scraping is the process of extracting data from a website in an automated way and Node.js can be used for web scraping. Even though other languages and frameworks are more popular for web scraping, Node.js can be utilized well to do the job too. In this post, we will learn how to do web scraping with Node.js for websites that don’t need and need Javascript to load. Let’s get started!

  • How to use cpan or pip packages on Nix and NixOS

    When using Nix/NixOS and requiring some development libraries available in pip (for python) or cpan (for perl) but not available as package, it can be extremely complicated to get those on your system because the usual way won't work.

  • Benchmarking compilation time with ccache/mfs on OpenBSD

    So, I decided to measure the build time of the Gemini browser Lagrange in three cases: without ccache, with ccache but first build so it doesn't have any cached objects and with ccache with objects in it. I did these three tests multiple time because I also wanted to measure the impact of using memory base filesystem or the old spinning disk drive in my computer, this made a lot of tests because I tried with ccache on mfs and package build objects (later referenced as pobj) on mfs, then one on hdd and the other on mfs and so on.

  • Cut I/O bound Rakefile task evaluation time by 12,4%

    Do you regularly run Rake on projects with thousands of FileTasks? In that case, chances are your Rake execution time is I/O bound. I’ve created two patches that can cut ⅛ off your Rakefile task evaluation/compilation time.

    Rake is the task and build automation tool for the Ruby programming language. It’s distributed as a part of the Ruby Standard Library default set of tools and modules. It’s a make-like tool that incrementally rebuilds only the parts of your project that have changed. It tracks changes by querying the file system for the last modified timestamp of every source and object file in your project. Each of these queries requires an individual system call (syscall) to the operating system kernel per file.

  • Glyphtracer 2.0

    Ages ago I wrote a simple GUI app called Glyphtracer to simplify the task of creating fonts from scanned images. It seems people are still using it. The app is written in Python 2 and Qt 4, so getting it running becomes harder and harder as time goes by.

  • One major obstacle to unifying the two types of package managers

    A major difference between what I called program managers (such as Debian's apt) and module managers (such as Python's Pip) is their handling or non-handling of multiple versions of dependencies. Program managers are built with the general assumption of a single (global) version of each dependency that will be used by everything that uses it, while module managers allow each top level entity you use them on (program, software module, etc) to have different versions of its dependencies.

  • Structural pattern matching in Python 3.10

    At a recent local Python meetup, a friend was presenting some of the new features in Python 3.8 and 3.9, and afterwards we got to talking about the pattern matching feature coming in Python 3.10. I went on a mild rant about how I thought Python had lost the plot: first assignment expressions using :=, and now this rather sprawling feature.

    My friend interpreted my rant rather generously, and soon said, “it sounds like you want to give a talk about it at our next meetup”. Okay … well, why not!

    In the meantime, I thought I’d get to know the feature better by writing up my thoughts and some code examples in article form. As you can gather, I’m rather biased, but I’ll try to present the positives as well as just criticism.

  • KConfigXT Alternative Generator

    I’m using for my own personal projects a generator for c++ preferences for quite a while, I’ll not say that it’s heavily tested as KConfigXT is, but it is also much more simple than it.

    While talking about it to a fellow developer he asked me how hard it would be to port the thing to KConfig (as the main backend I used was QSettings) - and the result is quite nice, the port toook less than a day, and now my generator generates configurations for both KConfig and QSettings.

Programming Leftovers

Filed under
Development
  • Quarkus for Spring developers: Getting started | Red Hat Developer

    Want to learn more about developing applications with Quarkus? Download our free ebook Quarkus for Spring Developers, which helps Java developers familiar with Spring make a quick and easy transition.

    The tools available in the Spring ecosystem make it easy to get started with building applications. However, the same is true for Quarkus, which has many additional features and capabilities aimed at improving the developer experience. A Spring developer can quickly get started working with a Quarkus project and immediately become more productive, as we'll see in this article. Plug-ins and tooling are available for most major IDEs, including VSCode, IntelliJ, and Eclipse.

  • Rust Lands Support For The Motorola 68000 Processors

    With the m68k community continuing to be active around supporting the vintage Motorola 68000 series with modern open-source software, Rust has now merged support for these old processors.

    With the forthcoming LLVM/Clang 13 release adding an M68k back-end, Rust that leverages LLVM is now adding support for the Motorola 68000 series processors.

  • Rakudo Weekly News: 2021.38 Questions, Ideas, Feedback

    Daniel Sockwell had a very busy week, asking all sorts of questions (1) (2), looking to improve the documentation on list assignments and soliciting feedback about that. And Daniel also published a blog post about the concept of labelling your code, in which they posit that “Comments are prose; labels are identifiers” (which resulted in quite a discussion on /r/rakulang). Thought provoking stuff!

  • C++ Vector of Pointers Examples

    An ordinary vector encountered in C++ programming, is a vector of objects of the same type. These objects can be fundamental objects or objects instantiated from a class. This article illustrates examples of vector of pointers, to same object type. To use a C++ vector, the program has to include the vector library, with a directive.

    All the vector code for this article is in the main() function, unless otherwise indicated. Vector of pointers to different types, is however, addressed at the end of the article. In order to appreciate vector-of-pointers, it is good to recall the knowledge for vector of objects.

  • What Is C++ Stringstream, and How to Use It?

    A string object instantiated from the string class is a list data structure. The list is a series of characters, and it is appreciated as such. The C++ string object has many methods. However, it lacks certain operations, which are best offered if it is seen as a stream.

  • 5 Best Linux Coding Editors [Ed: Too many Microsoft suggestions (40% of these), including proprietary software with Microsoft surveillance]

    Once you learn how to code, you can start building great applications that solve a problem or join businesses and companies looking for those with stellar coding skills. An important tool you will need is a code editor. Code editors come with various features that make it easy to code, create great applications, debug code, deploy code and so much more. Today, we are going to focus on five of the best code editors for Linux users. Keeping with the theme of Linux, the code editors below are free, open-source, or both.

  • Josef Strzibny: Ruby for ebook publishing

    A lot of times, people ask what’s Ruby good for apart from Rails. Ruby is great for various tasks from several different domains, and today, I would like to share how anybody can use Ruby in publishing ebooks.

    Since I used some Ruby tasks in publishing my first-ever ebook Deployment from Scratch, it crossed my mind to write down why I think Ruby is great for publishing ebooks.

  • Qt World Summit 2021 – registration now open!

    Join online as the community meets on November 3. Qt World Summit gathers together more than 5 000 developers, designers, managers and executives from over 90 countries around the world.

  • Teaching by filling in knowledge gaps

    I asked on twitter what people feel was easier to learn 15 years ago. One example a lot of people mentioned was the command line.

    I was initially a bit surprised by this, but when I thought about it makes sense – if you were a web developer 15 years ago, it’s more likely that you’d be asked to set up a Linux server. That means installing packages, editing config files, and all kinds of things that would get you fluent at the command line. But today a lot of that is abstracted away and not as big a part of people’s jobs. For example if your site is running on Heroku, you barely have to know that there’s a server there at all.

    I think this applies to a lot more things than the command line – networking is more abstracted away than it used to be too! In a lot of web frameworks, you just set up some routes and functions to handle those routes, and you’re done!

    Abstractions are great, but they’re also leaky, and to do great work you sometimes need to learn about what lives underneath the abstraction.

Devices/Embedded and Development

Filed under
Development
Hardware
  • Backplane Systems Technology Presents Neousys’s IGT-22-DEV Industrial-grade IoT gateway Development Kit

    IGT-22-DEV provides a ready-for-use software environment featuring Debian Buster, Docker CE, Node-RED, Python3, GCC, and IoT platform agent configured with sensors and cloud connection. With minimum provisioning on the IoT platform, a web-based dashboard becomes available and can be accessed on a desktop computer, tablet, or mobile phone, wherever you may be. IGT series supports various programming languages, such as Python and GCC. On top of that, IGT-22-DEV has Node-RED pre-installed for intuitive graphical and local logic control of the built-in DO, allowing prompt responses. Unlike the standard IGT-22, the USB port of IGT-22-DEV is specifically set to OTG mode to provide serial and LAN functions over USB, so you can choose to connect to IGT-22-DEV with a USB cable.

  • Arm PSA Level 3 certified Sub-GHz wireless SoCs support Amazon Sidewalk, mioty, Wireless M-Bus, Z-Wave…

    Silicon Labs has announced two new sub-GHz wireless SoCs with EFR32FG23 (FG23) and EFR32ZG23 (ZG23) devices adding to the company’s Gecko Series 2 Cortex-M33 platform.

  • Top 10 IoT Boards for Development and Prototyping in 2021

    This is one of the popular IoT Boards based on IoT Technology. The newest version of the low-cost Raspberry Pi computer is the all-new Raspberry Pi 4 Model B. This electronic board, which is the size of a credit card, has several enhancements. For starters, the power connector is USB-C, which may accommodate an additional 500mA of current, providing 1.2A for downstream USB devices. A pair of type-D (micro) HDMI connections have been installed instead of the type-A (full-size) HDMI connectors, allowing for dual display output within the existing board footprint. In Raspberry Pi 4, the Gigabit Ethernet magjack is now on the top right of the board, rather than the bottom right. It has a new operating system based on Debian 10 Buster, which will be released soon. The user interface has been modified, and new programs such as the Chromium 74 web browser have been included. Additionally, the Mesa “V3D” driver has replaced the legacy graphics driver stack used on previous models, allowing for the removal of nearly half of the platform’s closed-source code, as well as the ability to run 3D applications in a window under X, OpenGL-accelerated web browsing, and desktop composition.

    [...]

    The NanoPi NEO Plus2 is a FriendlyElec-developed all-winner-based ARM board that is less than half the size of the Raspberry Pi. But that doesn’t make it any less capable in terms of storage and performance. Its operating system is Ubuntu Core 16.04, a strong Linux distro. It has a 64-bit quad-core Allwinner A53 SoC with Hexa-core Mali450 GPU, 1GB DDR3 RAM, 8GB eMMC storage, Wi-Fi, 4.0 dual-mode Bluetooth, and 1 MicroSD slot, 10/100/1000M Ethernet based on RTL8211E-VB-CG. In comparison to the Raspberry Pi, the NanoPi NEO Plus2 has gigabit Ethernet, 8 gigabytes of eMMC storage, and two USB ports. It is powered by a micro-USB port and, despite its little size, offers expandable memory owing to a microSD card. It also has additional benefits, such as low cost, fast speed, and high-performance computation.

  • Break point: Prometheus, JFrog, GDB, Boundary, Serverless Framework, Eclipse, Delphi, Kubermatic, and DataSpell

    The team behind monitoring system Prometheus has pushed version 2.30 into the wild, and with it some improvements to the scrape functionality. Amongst other things users can now adjust the scrape timestamp tolerance to save TSDB disk space in cases where a higher ms difference isn’t a problem. They also have access to an experimental way of configuring a scrape interval and timeout through relabeling, and new metrics behind the extra-scrape-metrics flag that expose the per-target scrape sample_limit value and scrape_timeout_seconds.

Free Software and Programming

Filed under
Development
Software
  • SD Times news digest: Android for Cars App Library 1.1, MariaDB announces a technical preview of NoSQL listener capability, and Rezilion funding - SD Times

    MariaDB released the technical preview of the NoSQL listener capability to define a port and protocol pair that accept client connections to a service.

    “We’ve opened up a port on MaxScale to listen for traffic that contains NoSQL data that we then store and manage in a MariaDB database,” Rob Hedgpeth, Director, Developer Relations at MariaDB, wrote in a blog post.

    When the MongoDB client application issues MongoDB protocol commands, either directly or indirectly via the client library, they are transparently converted into the equivalent SQL and executed against the MariaDB backend. The MariaDB responses are then in turn converted into the format expected by the MongoDB client library and application.

  • All the changes between JDK 11 and the Java 17 LTS release

    If you were to look at the features in Java 17, the most recent long-term support (LTS) release from Oracle, you’d probably be disappointed. There’s only 14 JDK enhancement proposals (JEP) included in the release, and none of them are particularly exciting. In fact, some of the JEPs are downright depressing, such as the deprecation of the Applet API for removal or the removal of the experimental AOT and JIT compilers.

    There are no ‘big bang’ JDK releases anymore. In the past, there would be a highly anticipated feature such as Java modules or Lambda expressions that would delay a release until the feature was complete. The Java world doesn’t work like that anymore. Releases now happen every six months. If a feature is complete, it goes into the release. If not, it gets targeted to the next release. But a new release happens every six months, and feature enhancements happen incrementally over time. So if you want to know what’s new in the latest LTS release, you really need to look over the various changes that were made and enhancements that were added between Java 11 and 17. Starting with Java 12, here is a list of them:

  • The future of Rust

    Despite its name, the Rust programming language has never looked so shiny and new. Way back in 2016, Stack Overflow’s annual survey of developers crowned Rust the “most loved” programming language. They voted their love again in 2017, 2018, 2019, 2020, and 2021. Presumably, when 2022 rolls around, that devotion to Rust will persist.

Programming Leftovers

Filed under
Development
  • Python in 2021: The Good, The Bad, and the Ugly

    In this post, I want to look at the biggest strengths and weaknesses of Python, with more emphasis on the weaknesses, just because these problems have been there for years now and some of the rough edges bleed a lot.

  • GitLab files to go public as both revenue and losses surge

    GitLab Inc., which provides a cloud service to enable software developers to share code and collaborate on projects, today announced plans to go public with an initial offering of stock.

    The San Francisco-based company, which counts among its competitors Microsoft Corp.-owned GitHub and Atlassian Corp. PLC’s BitBucket, didn’t reveal yet how much it plans to raise or precisely when it will do the IPO. It was last valued at $6 billion after a secondary share sale in January, and has raised a total of $400 million from investors such as Khosla Ventures, Altimeter Capital, TCV, Franklin Templeton and Coatue Management.

  • [Old] LLVM internals, part 1: the bitcode format

    I’ve done a couple of posts on LLVM itself, mostly on things you can do with LLVM or how LLVM represents particular program features.

    I’ve received some good feedback on these, but I’d like to focus a sub-series of posts on LLVM’s implementation itself: the file formats, parsing strategies, and algorithmic choices underlying LLVM’s public interfaces (APIs, CLIs, and consumable output files). I’ll be writing these posts as I work on a series of pure-Rust libraries for ingesting LLVM’s intermediate representation, with the end goal of being able to perform read-only analyses of programs compiled to LLVM IR in pure Rust.

    For those who don’t know what LLVM is, this post has a broader background on LLVM’s components and intermediate representation.

  • [Old] LLVM internals, part 2: parsing the bitstream

    In the last post, I performed a high-level overview of LLVM’s bitcode format (and underlying bitstream container representation). The end result of that post was a release announcement for llvm-bitcursor, which provides the critical first abstraction(s) for a pure-Rust bitcode parser.

    This post will be a more concrete walkthrough of the process of parsing actual LLVM bitstreams, motivated by another release announcement: llvm-bitstream.

    Put together, the llvm-bitcursor and llvm-bitstream crates get us two thirds-ish of the way to a pure-Rust parser for LLVM IR. The only remaining major component is a “mapper” from the block and record representations in the bitstream to actual IR-level representations (corresponding to llvm::Module, llvm::Function, &c in the official C++ API).

  • LLVM internals, part 3: from bitcode to IR

    This post marks a turning point: now that we have reasonable abstractions for the bitstream container itself, we can focus on mapping it into a form that resembles LLVM’s IR. We’ll cover some of the critical steps in that process1 below, introducing a new crate (llvm-mapper) in the process.

    Also, critically: this post is the first in the series where our approach to parsing and interpreting LLVM’s bitcode differs significantly from how LLVM’s own codebase does things. The details of the post should still be interesting to anyone who wants to learn the details of how an IR-level LLVM module is constructed, but will not reflect how LLVM itself does that construction2.

Syndicate content

More in Tux Machines

Maui Report – 15

Maui 2 was released a month 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 or so months of development. What’s new? Among many bug fixes that will be listed below for each individual app, some of the highlights include better support for client-side decorations aka CSD. Clip, the video player, is now working again on Android; MauiKit Controls now provide improved contextual menu actions and a lighter tab bar styling. Index, the file manager, can now also preview PDF documents, adding up to support for previews of text, video, audio and fonts file types; and translucency support is now embedded into MauiKit itself. Read more

Overcoming the Challenges of Embracing Linux: a Different Perspective

After months of working at SUSE, my Jungle Green t-shirt was finally recognized at a store. “SUSE?” the gentleman asked, pointing at the large white letters. “Yes, I work there!” I responded, thrilled that I had the opportunity to engage in our mutual love of the chameleon, Geeko, “But I don’t work on the technology, I’m in Program Management.” “Well, let me ask you this – what is the operating system on your computer at home?” he asked, inquiring to my level of SUSE-ness. “Just the basic… Microsoft,” I responded. He continued, “I have a virtual machine with Slackware 1.0 I’m running, and I’ve been trying to get my hands on something old, openSUSE older than 5.3.” I breathed a sigh of relief when our conversation was cut short and he ran off to help another customer. Slackware? Virtual Machine? All terms I had just enough exposure to know what category they belonged in, yet not enough to carry a conversation. Despite the embarrassment, I knew I wasn’t alone. A 2020 study by the AnitaB.org Institute found that women make up 28.8% of the tech workforce. When considering open source technology, this number further shrinks down to the single digits. Nonetheless, the number of women becoming cloud native practitioners is growing. Recently, Lynne Chamberlain, CEO of SUSE Rancher Government Solutions, and Denise Schannon, Director of Engineering, joined special host Katie Gamanji for a special feature of OCTOpod in which they discussed their contributions to Linux, challenges they have faced and shared inspiring stories on how they’ve overcome those challenges to get to where they are today. Read more

Android Leftovers

Privacy-focused Linux Distributions to Secure Your Online Presence in 2021

Linux distros are usually more secure than their Windows and Mac counterparts. Linux Operating Systems being open-source leaves very less scope of unauthorized access to its core. However, with the advancement of technologies, incidents of attacks are not rare. Are you in a fix with the coming reports of Linux systems targeted malware attacks? Worried about your online presence? Then maybe it’s time to go for a secure, privacy-focused Linux distro. This article presents a guide to 3 privacy-oriented Linux distributions that respect your privacy online. Read more