Table of Contents

From The Chief Editor's Desk

Casual Python, Part 1

PCLinuxOS Recipe Corner: Slow Cooker Asian Beef

ms_meme's Nook: Daddy Boot Up That Sixty-Four Bar

Short Topix: Assaults On Privacy Continue Unchecked

Inkscape Tutorial: Some Useful And Fun Extensions

Configuring CUPS-PDF

A Guided Tour Of The Data Facebook Uses To Target Ads

Alternatives To Dropbox, Part 3

PCLinuxOS Family Member Spotlight: masinick

One Way To Duplicate Your Installation On Another Computer

ms_meme's Nook: Swinging PCLOS Blues

PCLinuxOS Bonus Recipe Corner: Italian Sausage With Tomatoes And Penne

Configuring Late Model Epson Printers

Victory! Illinois Supreme Court Protects Biometric Privacy

PCLinuxOS Puzzled Partitions

Screenshot Showcase

From The Chief Editor's Desk

Yuck! It's that time of year again. It's cold and flu season. While this year's influenza incidence seems markedly slower and milder than last year's near-pandemic outbreak (at least in my area, so far), it has arrived on schedule and as expected. My wife and I work on the front lines of healthcare to treat those who are infected with the influenza virus, among other things. Of course, colds are also rampant at this time of year, as well. So, it should be no surprise, with all of our exposure to acutely ill patients, coupled with Ryan's exposure to his classmates at preschool, that something is making its way through our house as I write this. All four of us -- me, Laura, Ryan and Lexi -- all have "it."

Even amongst two healthcare professionals (myself and my wife), we're divided on whether we all have colds or influenza (I say it's a nasty cold). Of course, to get an "official" diagnosis of influenza, we would have to get a laboratory test to confirm it ... which costs money we'd rather not spend for information we really can't do anything about. All you can do with influenza is really just let it run its course, and try to take medicines that (hopefully) make its symptoms less severe.

Yeah, yeah, yeah. I know they have Tamiflu. Personally, I wouldn't waste my money on that overpriced and underperforming medication. Some studies have shown that Tamiflu, even when taken early, only reduces the influenza symptoms by ... are you ready for this? ... about 23 hours. Less than ONE DAY! I'd rather save my $300 and just tough it out for one more day.

Both of us are required to receive the annual flu vaccine, due to our jobs. Both of our kids also receive the annual flu vaccine, to help protect them in the event that mom or I bring home the influenza bug from work. Even if the annual flu vaccine "misses" the flu strains that are circulating in the general population (as so often happens), it does help lessen the symptoms. So, there is value in getting the annual flu vaccine, even when it doesn't match up with the strains of influenza that are circulating.

The annual flu vaccine is BIG BUSINESS. Back in 2015, CNBC summed up the annual flu vaccine business as follows: "... $1.61 billion in revenue, according to industry researcher IMS Health. Globally, manufacturer CSL estimates the market for influenza vaccines at $4 billion." There are three primary manufacturers of the annual influenza vaccine. Sanofi Pasteur (U.S.) is the largest, followed by CSL (Australia), then GlakoSmithKline (U.S.).

About 12 or so years ago, I read about a small pharmaceutical firm that had come up with a novel approach to producing a universal flu vaccine. It was just preparing to enter Stage 2 trials, and appeared to promise lifelong immunity. But then, all of a sudden, there was no more information forthcoming. Come to find out, the company was purchased by Sanofi Pasteur, and the project mothballed. What a great way to protect one of your cash cows, huh? The emergence of a universal influenza vaccine would have spelled disaster for the huge amounts of cash Sanofi Pasteur could make from selling their marginally effective annual influenza vaccine.

Today, there are multiple companies exploring the feasibility of a universal influenza vaccine. It seems that the drive for advancement couldn't be extinguished with mountains of cash by purchasing companies and hiding promising advances on the shelf. One such universal influenza vaccine is now preparing to enter Stage 3 clinical trials (meaning, on a fairly large number of human subjects), according to a November 12, 2018 article on The Scientist. It seems to promise long-term immunity, ending the reliance on the annual influenza vaccine guessing game we've endured for so many years.

Let's all hope that either the BiondVax vaccine (the one currently entering Stage 3 trials), or one of the other vaccines currently being explored, come to fruition. In the early 20th Century, the Spanish Flu (H1N1) epidemic is reported to have killed more people around the world than were killed in World War I. Some scholars have pointed to the Spanish Flu being responsible for helping end World War I. An influenza pandemic like the one a century ago is likely to have an even greater devastating effect, given not only the increased world population, but also the greater access to international travel.

For what it's worth, the prominent influenza strain making the rounds this year is H1N1, the same that caused the Spanish Flu pandemic a century ago. But, as is common with viruses, it has mutated from its form from the early 20th Century, and seems to have lost some of its virulence in its present form.

Since both the cold and influenza are both respiratory infections, (no, what some people call the "stomach flu" isn't caused by the influenza virus at all, but usually by a strain of norovirus) some may have difficulty in distinguishing which it is that they have. Fortunately, the CDC has produced a graphic that will help you distinguish which ailment it is, if or when you get it.

********************

This month's cover image, designed by Assistant Editor Meemaw, was inspired by the second Monday of February being designated as "Clean Out Your Computer Day." This year, that falls on February 11. So, as if anyone reading this really needed a reason, "Clean Out Your Computer Day" is a day to spend with your computer. You can make use of this opportunity to archive old files you may no longer need to access on a regular basis, but may still need to retain. You can also use this opportunity to get your files organized, so that you spend less time hunting and searching for them when you do need to access them.

********************

So, until next month, I bid you peace, happiness, serenity and prosperity ... and good health.

Casual Python, Part 1

by Peter Kelly (critter)

Introduction

Learning to use a programming language can be a long, difficult and at times frustrating process. Most of the books and documentation are written by expert programmers and computer scientists describing each aspect of the language in great detail. If you want to become a professional programmer then I am afraid that is the way to go. But what about the rest of us? The casual users and hobbyists who simply want to be able to create small, useful applications with a graphical interface for their own or limited use.

I am not an expert and I am certainly not qualified to tell people how to program in python but I may be able to help you get a little more satisfaction from your first steps into the language. I am one of the casual users mentioned above, and hence the title of this document.

The traditional way of introducing a new programming language is to start with the hello_world program, which simply prints 'Hello world!" in the terminal. In python3 this would be:

print("Hello world!")

Not very helpful for our cause. Then you have to learn all of the boring and unfamiliar terms and syntax, type some code into an editor and then execute it in a terminal. Also, usually, it fails to run and you have to peer at it trying to find what went wrong. Eventually you get it running and for all your work you get to see some new text appear in a terminal -- bummer! Is this it? "No" you are told, "But you have to master this before you can start writing real, graphical applications," This, not surprisingly, puts off a lot of people.

Our problem is that we want to prodAm using anchor links but keep getting the following error when splitting uce graphical applications now, but to produce them we need to know a lot of the language and some rather sophisticated and advanced programming techniques. It seems that we have a chicken and egg scenario here. Happily, there is a way around this, but you will, eventually, have to learn a fair bit of python, and it will help if you know just a little of the python language. An excellent introduction to the language is a free book written by C. H. Swaroop, titled "A Byte of Python".

This is a whirlwind tour of the language aimed at beginners, and can be read in a couple of evenings. It's just enough to whet your appetite. Read it. It will not be time wasted.

I shall also be introducing and demonstrating elements of the python language as we encounter them in the example applications.

When learning to program, one of the methods often taught is something called "top down design." How this works is to start with the end result and then work backwards, adding statements that lead to the result. For example:

      New price = $21 The result that we want

Now the new price must be the old price plus the increase/decrease so:

      New price = Old price + Price change
      New price = $21

The old price we can look up but the price change must be some percentage of the old price:

      Old price = $20
      Percentage = 5%
      Price change = Old price x Percentage
      New price = Old price + Price change
      New price = $21

And so the program structure is worked out. This was not written in any real programming language, but in something called pseudo code, which means that it can be done without having to first learn the language. Simply write down anything that makes sense and describes the actions to take. When starting a new project, I not only have no idea how the program will be constructed, but often also don't know how to write code that will do what I want to do, or how to get the data/text to do it to.

Breaking down the program like this gives me a start point, and I can fill in the gaps as I go. The internet is a great place to find out how to do things. Whatever you want to do, you can bet that someone else has wanted to do something at least similar and that their questions have been answered on sites such as stack exchange. If nobody else has tried what you are doing, ask yourself if there is perhaps another, easier way to achieve your goal.

Another breakthrough in making programming more accessible to 'ordinary' people was the introduction in the 'nineties of 'Rapid Application Development' in the form of Microsoft Visual Basic and Borland Delphi. These systems allowed the user to create a graphical interface by dragging and dropping buttons and things on to a form and then adding some code to get them to perform as required.

As far as I am aware there is no such thing (yet) as "Visual Python," but we can get close. The easiest graphical system to use with python is called "tkinter," but Qt5 has a lot more to offer and so I am going to use that. Qt5 forms the basis of the current KDE/Plasma desktop. Also, Qt5 comes with a very useful utility called "Designer," which takes care of the drag'n drop part for us. Using this, I am going to create a very simple application which has no real practical use but works. It will have its own window, some buttons and an area into which you can type text. You will also be able to resize it, minimise it and do all of the usual things graphical applications do. All of this without having to learn any of the programming language. This will be our template application, and we can add functionality as we learn the language.

Getting started

The first thing that you need is the program language itself -- python. There are currently two versions of python available: python2 and python3. They are very similar, but not entirely compatible. Python2 reaches "end of life" in 2020, so I will use python3 here (which I believe is superior, anyway). Python3 is installed by default in PCLinuxOS.

The next thing we need are the python bindings to a graphical tool-kits' libraries. If you don't know what that means, don't worry. Just follow along. From synaptic install

python-qt5
python3-pyqt5-sip
python3-qt5
python3-sip
and qttools5-designer

Qt5 is currently the latest version of the Qt toolkit.

We also need an editor. Any plain text editor will do, but I am going to use geany, which again is in the repositories and may need to be installed. If you use geany, you can more easily follow along.

Finally, create a file named pyuic5 with the following contents:

#!/bin/sh
exec /usr/bin/python3 -m PyQt5.uic.pyuic ${1+"$@"}

And another named pyrcc5 with contents:

#!/bin/sh
exec /usr/bin/python3 -m PyQt5.pyrAm using anchor links but keep getting the following error when splitting cc_main ${1+"$@"}

As root copy them both to /usr/bin

OK. If you are using KDE Plasma, we are good to go. If you are using one of the other desktops, or the lighter darkstar edition, then you may need to install more. The error messages from python should tell what is missing.

The template

The template application that we start with is very simple (and pretty much useless) but it works and will be the foundation for more ambitious projects. It looks like this.

It's not much to look at, and it only allows you to type into the box and to clear the box using the Clear button, or by pressing the F7 key. The application can be closed by pressing the escape key, clicking the Quit button or the close button on the top right of the window. Built into this is the ability to maximise, minimise and move the window around by dragging and to resize it by dragging a side or corner of the window and all of the things inside, buttons etc, are automatically repositioned. It even has its own icon. This means that the application already does a lot of what all 'proper' applications can do. All we have to do to this template is to make it useful.

Create a directory somewhere in your home directory named py_template. Change to that directory and add a suitable icon. Mine is a smiley face.

Creating the interface

The Qt toolkit is a complicated affair and the documentation is - well! Have a look here.

That's enough to discourage even the hardiest of us. However, Qt5 comes with a nice graphical tool called "Qt Designer," which you installed earlier and should now find in your menu, probably under development or similar. This will create the actual graphical interface that appears on the screen. We will also need a few lines of python code to use the interface, and there are a couple of other little steps required to tie everything together.

This next section may seem like a lot of work for such a simple application, but we are making a template here that can be copied and re-used to make many more applications.

Start the designer and you will get something like this. Yours may look slightly different, depending on the theme you use and on whether you use kde or some other environment. You may also have to resize the side bars, which you can do by dragging the edges.

Select Widget and click the Create button. A new, blank form is created that looks like this:

From the Widget box on the left drag and drop a textEdit Widget from the Input widgets section, a Label from Display Widgets and two Push Buttons from Buttons. Move them around and resize them until they look approximately like this:

Right click on the background of the form, that's the part with dots on it, and at the bottom of the menu that pops up select Lay Out and then Lay Out in a Grid. The Widgets will then be reorganised into a more symmetric layout like this:

On the right of the designer application, locate the Property Editor. If it is not there, select View from the menu and make sure that it is checked. Select the left pushbutton, and in the property editor change the objectName to clearButton. Scroll down the property editor to text and change this to 'F7 - Clear'. Select the other pushbutton and change its properties to quitButton and 'Esc - Quit'. Spelling is critical in the objectName section, as this is the name that will be used in the python code. Select the main form, and in the property editor, find 'window icon', and click in the space on the right. Expand the drop down box, select 'choose file', navigate to your new directory, and select the icon you put there.

Finally, select the label and change its text to PyQt5 template. Scroll down to Alignment, Horizontal and click in the right hand column. Select AlignHCenter. Your form should now look like the finished application above.

Press Control + R, and you will be presented with a preview that you can resize. Notice that the contents are automatically re-positioned as you change it. None of the widgets do anything yet as we need to create some python code for that. Use the close button on the top right of the preview.

Go to File - Save and navigate to your template directory and save the file there as template.ui (the .ui suffix denotes a user interface file).

Your directory should now look like this:

qt5_template/
    face-smiley.png or whatever your icon was named
    template.ui

The template.ui file was created by the designer but is not yet readable by python. This is something that we shall fix now. Create a new file with the following contents:

#!/usr/bin/env bash
pyuic5 template.ui > template_ui.py

Save it as update_res.sh. This will convert the template.ui file generated by designer to code that python can understand. Make update_res.sh executable. In Dolphin, this means right click on the file, select Properties, and the on the permissions tab of the dialog that opens, check 'Is executable'.

If you now execute update_res.sh (double click in dolphin) another file will be created named template_ui.py. This is the python code version of the file created by designer.

The python code

First we need to set up geany to use python code. Open geany and go to Edit - Preferences - Editor. Open the Indentation tab and make sure that Width: is set to 4 and type is set to spaces. Under the Display tab, check Show line numbers. Click apply and close the dialog.

The python language uses indentation to format its code, and the convention is to use four spaces. The settings you just did ensure that this is always the case, and that pressing the tab key inserts four spaces, and not a tab character that looks the same but may be set differently in another editor. Stick to the conventions and life will be easier.

Enter the following code exactly as shown - without the line numbers but including the blank lines. The code is case sensitive. Copy and pasting is not recommended, as typesetting often includes invisible formatting that corrupts the code.

Note: The first character of all unindented lines is flush against the left of the page, line 10 is indented 4 spaces, line 11 a further 4 spaces, line 19 a further 4 spaces. The long lines that appear on lines 10,11 and 32 are actually two underscore characters "__" so that is what you should type.

1 #!/usr/bin/env python3
2
3 import sys
4 from PyQt5.QtCore import *
5 from PyQt5.QtWidgets import *
6 import template_ui
7
8
9 class Template(QWidget, template_ui.Ui_Form):
10     def __init__(self):
11     super(self.__class__, self).__init__()
12     self.setupUi(self)
13     self.textEdit.setFocus()
14     self.clearButton.clicked.connect(self.clearText)
15     self.quitButton.clicked.connect(self.exitApplication)
16
17 def keyPressEvent(self, e):
18     if e.key() == Qt.Key_Escape:
19         self.exitApplication()
20     if e.key() == Qt.Key_F7:
21         self.clearText()
22
23 def clearText(self):
24     self.textEdit.clear()
25     self.textEdit.setFocus()
26
27 def exitApplication(self):
28     self.close()
29     sys.exit()
30
31
32 if __name__ == '__main__':
33     app = QApplication(sys.argv)
34     form = Template()
35     form.show()
36     app.exec_()

Save it as qt5_template.py.

That's it. 28 lines of code if you don't count the blank lines. Before I explain any of the code, let's see if we can get it to run. Once it is running, we have our template application.

Your directory should now look like this:

qt5_template/
    face-smiley.png
    qt5_template.py
    template.ui
    template_ui.py
    update_res.sh

Make qt5_template.py executable, and run it. If all went well, you should see the template application appear. If it does, then congratulations, you are done. If not, check your typing -- this is the hardest part when beginning to program. You may have to go over things several times before you finally get it right.

A side effect of running this code is that python makes another directory named __pycache__ and fills it with some files. This we can, and should, ignore.

Understanding the code

Almost all of this code is specific to Qt5. It is python code but quite advanced python code. However, it is not necessary to understand it to make use of it. Eventually, as it becomes more familiar, some of it will begin to make sense and you will be able to add to, modify and improve it to make your own applications. The code may seem complicated at first, especially if you haven't done much programming, so don't expect to understand it. I would suggest skimming through the explanation, and then coming back to it later when you have done a little more python/Qt programming. We began knowing nothing about programming in python and Qt, and already we have made a fully working, graphical application. As we progress to more useful applications, you will see how more and more of the pieces fit together, and then you can start assembling your own applications.

A brief explanation:

Line 1: Python is an interpreted language and the system needs to know which interpreter to use to execute the code. This line tells it to use python3. If you look at the update_res.sh file, it has a similar first line telling the system that for this program it should use bash as the interpreter.

If we didn't include this line, we could get python to execute the code directly by typing in a terminal

python3 qt_template.py

from within our qt5_template directory. Having the line in the code makes this automatic.

Lines 3 to 6: These are import statements which means that python 'imports' or reads code that has already been written for us.

Line 3 imports the sys module which is code provided for us by the python developers to interface to the system.

Lines 4 & 5 import the code provided by those nice people over a Riverbank computing to make python understand the Qt5 system.

Line 6 brings in the code we generated from the user interface file output from designer. We don't need to know about this code at this time.

Line 9: Creates a 'class' on which the application will be based. The class name is Template with a capital 'T' but template_iu has a lower case 't'. This distinguishes between the class and the file we are importing.

This is a biggy! You can safely skip this explanation for now.

Understanding classes is the core of understanding object oriented programming. A class is a kind of blueprint for an object, just as in nature a fish, bird or dog are classes of animal, and duck is a type of bird with some distinctive features, but is still an animal. Here, we are creating a class named Template, and our application will be an instance of this Template object. This class is based on the QWidget class, which we started within designer, but then we added buttons, a label and a textedit to the form provided and these changes were saved out to a file named template.ui which in turn was converted to a python file.

This line constructs a class based firstly on QWidget, and then adds in the changes we incorporated on the form. This was the reason for the import in line 6. This is known as inheritance. Our class inherits everything coded into a QWidget object. It also gets all of the changes that we made in our user interface file. The class definition calls up the QWidget and Form definitions.

Lines 10 to 15: Initialise or set up things.

Line 13 gives the textedit the focus so that we can immediately start typing into it when the application starts.

Lines 14 and 15 connect signals generated when a buttons are clicked to code that does something useful.

Lines 17 to 21: Get key presses and connect to code in a similar manner to the button clicks.

Lines 23 to 25: Clear the textedit box and reset the focus to the textEdit object. this focus was lost when the clearButton object was pressed.

Lines 27 to 29: Shut things down.

Line 32: This is where execution of our code really starts. Just accept the format of the line as shown for now.

Line 33: Makes an application object. This is done by the Qt code we imported.

Line 34: uses the Template class 'blueprint' to create a form named, imaginatively, form. This naming is actually an assignment, it assigns an instance of the class that we made to the variable 'form'. The name does not have to be form it could be almost anything but for now, as 'form' works, keep to it.

Line 35: Prepares the form for display.

Line 36: Executes the application!

Technical note: The code in line 33 is the start of things. Here a QApplication object is created, which I am assigning to the name app. A QApplication is required by every Qt application. This object receives some vital information, such as screen size and location of our code, from the system and from the sys.argv call. With this information, a system aware application is built and a continuous loop started, known as the event loop (because it is waiting for events such as button clicks or window resizing). When an event occurs, it is added to to the event queue to be processed. When the event has been processed, the application returns to the event queue to process more events as they occur. This is, of course, unless the event just processed was a request to shutdown the application. Qt applications are thus known as event driven, using system resources only when an event occurs. Line 36 launches the application with the objects exec_() method. Notice the underscore at the end. This is to differentiate between this method and python's own built in exec() method.

Learning to use the python language

There are two parts to learning to program Qt graphical applications. One part is the mechanics of the actual user interface, and the special code needed for python to interface with it. This code is specific to the Qt system, but is still python code. The second part is the standard python code needed to perform the function that the application serves. This type of code does not need to know about the graphics side of things, and could be executed in a terminal or in the python interpreter. In these texts, I give an example application that uses some of each type but have separated out the explanation of the standard code so that it can be learned alongside the building and coding of the user interface.

Python is quite friendly to new users, but is also extremely powerful once you get familiar with its many features. First, it is necessary to learn about the basics. Open a terminal (yes, a command line terminal that we are trying hard to avoid. This time however it is extremely useful). Type the command python, press return and the interactive python interpreter is launched. Here you can type in anything 'pythonesque' and get immediate results. This is a great way to try things out without writing a program.

python
Python 3.7.1 (default, Oct 22 2018, 10:41:28)
[GCC 8.2.1 20180831] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

The >>> is the interpreters prompt which is waiting for something to be typed. When you want to leave the interpreter type quit() or press Control-d. In python if you want to make a comment in your code use the # character. Anything that follows this character is ignored by python. Comments are a good way of explaining some part of the code that may not be obvious. Use comments, and when you come back to the code in a few months time, you will be glad that you did.

Python uses several core type 'objects', each of which I will discuss as we progress. The first of these types of objects I want to describe are numbers. Python is good with numbers. I will start with integer (whole numbers) and floating point numbers (those with a decimal point) also known as floats.

Python is a very capable calculator and the following arithmetic operators are available:

+                    addition
-                    subtraction
*                    multiplication
/                    true division and returns a float
//                   floor division and rounds down towards the negative direction ←.
                     Also, if any of the values are a float the rounded value is a float.
%                    modulus
**                   exponentiation

The first three are straight forward:

>>> 7 + 4
11

>>> 2 + -3
-1

>>> 3.7 - 1.5
2.2

>>> 3.14 * 5.726
17.97964

Division is mildly complicated as there are two forms, true division and floor division.

>>> 9 / 3 # True division
3.0 # always a floating point result

>>> 7 / 3
2.3333333333333335 # floating point numbers often have small errors
# notice the 5 at the end. This nothing to do with
# python but is caused by the way floating point
# numbers are stored by the system.

>>> 7 // 3 # Floor division
2 # two integers return an integer

>>> 7.0 // 3
2.0 # float in expression returns a float.

>>> -5 // 2
-3 # rounds down ... -3 -2 -1 0 1 2 3 ... ←

% (modulus) gives the remainder after division

>>> 14 % 3
2

>>> 14 % 3.0
2.0

>>> 14 % -3
-1 # This might not be obvious but it is correct.

** exponentiation

>>> 4 ** 2 # 4²
16

>>> 4 ** -2 # 1 / 4²
0.0625

>>> 4 ** 0.5 # √4
2.0

An extremely useful addition to these are the 'augmented assignment' operators:

+=, -=, *=, /= and lots more, these are the most common.

>>> n = 3
>>> n += 2
>>> n
5

>>> n /= 2
>>> n
2.5

The following numeric functions are implemented:

abs(x)                  Returns the absolute value of x

divmod(x, y)         Returns the quotient and remainder of
                          dividing x by y as a tuple of two
                          integers

pow(x, y)             Raises x to the power of y; the same as
                          the ** operator

pow(x, y, z)          An alternative to (x ** y) % z

round(x, n)           Returns x rounded to n integral digits
                          if n is a negative integer or x rounded
                          to n decimal places if n is a positive
                          integer

In addition to these basic features complex numbers are available with real and imaginary parts

>>> c = 4 + 2j
>>> c
(4+2j)

>>> c.real
4.0

>>> c.imag
2.0

Numbers may also be entered in binary, hexadecimal and octal and converted between formats using the bin(), hex(), oct() and int(functions.

>>> bin(42)
'0b101010'

>>> hex(42)
'0x2a'

>>> oct(42)
'0o52'

>>>> int(0x2a)
42

There are also bitwise, logical and comparator operators.

Operator precedence follows an extended version of the PEMDAS rule (parentheses, exponentiation, multiplication, division, addition and subtraction) with equal precedences following the left - right rule:

10 + 8 / 2 * 4            >>>26 # not 11, 36, 56, 36 or 2.25.

Operators:
()                       Parentheses
**                      Exponentiation
+x, -x, ~x           Unary plus, Unary minus,
                         Bitwise NOT
*, /, //, %           Multiplication, Division,
                         Floor division, Modulus
+, -                    Addition, Subtraction
<<, >>               Bitwise shift operators
&                        Bitwise AND
^                       Bitwise XOR
|                        Bitwise OR
==, !=, >, >=, <, <=,
is, is not, in, not in    Comparison, Identity and
                          Membership operators
not                      Logical NOT
and                      Logical AND
or                        Logical OR

Often it is clearer to use parentheses to force the correct order.

>>> 10 + (8 / 2) * 4
26.0

>>> (10 + 8 / 2) * 4
56.0

>>> (10 + 8) / (2 * 4)
2.25

If this is not enough you can import various modules or packages that extend the capabilities. The math module gives you everything you would expect of a scientific calculator, the decimal module provides variable precision floating point math and the fraction module lets you work with fractions. There are also some serious packages such as numpy, which are used by such institutions as CERN and NASA.

You should get familiar with basic math and the augmented operators as these are used frequently. The rest can wait until you need them or we encounter them in one of the examples.

PCLinuxOS Recipe Corner: Slow Cooker Asian Beef

Slow-Cooker Asian Beef

Ingredients

1 cup beef flavored broth
1/4 cup packed brown sugar
1/4 cup soy sauce
2 tablespoons chili garlic sauce
1/2 teaspoon ground ginger root
6 green onions, sliced on the bias, white and green parts separated
1 boneless beef chuck roast (2 to 3 lb)
1/4 cup cornstarch
1/4 cup cold water
4 cups hot cooked white rice
1/4 cup chopped fresh cilantro leaves
1 tablespoon toasted sesame seed
1 lime, cut into wedges

Directions

Spray 3 1/2 or 4-quart slow cooker with cooking spray. Add broth, brown sugar, soy sauce, chili garlic sauce and ginger root to slow cooker; stir with whisk to combine. Stir in green onion whites. Reserve green onion greens for garnishing; cover and refrigerate until ready to use. Add roast to slow cooker; turn to coat. Cover; cook on Low heat setting 8 to 9 hours or until very tender.

Transfer roast to cutting board. Cool slightly; cut or shred, and return to mixture in slow cooker. Increase to High heat setting. In small bowl, beat cornstarch and cold water. Quickly stir into liquid mixture in slow cooker. Cover; cook 5 to 10 minutes or until thickened.

Divide rice among 8 bowls. Divide shredded beef among bowls of rice. Top with reserved green onion greens, cilantro and sesame seed; serve with lime wedges.

ms_meme's Nook: Daddy Boot Up That Sixty-Four Bar

MP3                                                                       OGG

Short Topix: Assaults On Privacy Continue Unchecked

by Paul Arnote (parnote)

Linus Releases 5.0-rc1 Kernel

On January 6, 2019, Linus Torvalds announced the release of the 5.0-rc1 Linux kernel.

Here is Linus's post to the Linux Kernel Mailing List:

So this was a fairly unusual merge window with the holidays, and as a result I'm not even going to complain about the pull requests that ended up coming in late. It all mostly worked out fine, I think. And lot of people got their pull requests in early, and hopefully had a calm holiday season. Thanks again to everybody.

The numbering change is not indicative of anything special. If you want to have an official reason, it's that I ran out of fingers and toes to count on, so 4.21 became 5.0. There's no nice git object numerology this time (we're _about_ 6.5M objects in the git repo), and there isn't any major particular feature that made for the release numbering either. Of course, depending on your particular interests, some people might well find a feature _they_ like so much that they think it can do as a reason for incrementing the major number.

So go wild. Make up your own reason for why it's 5.0.

Because as usual, there's a lot of changes in there. Not because this merge window was particularly big - but even our smaller merge windows aren't exactly small. It's a very solid and average merge window with just under 11k commits (or about 11.5k if you count merges).

The stats look fairly normal. About 50% is drivers, 20% is architecture updates, 10% is tooling, and the remaining 20% is all over (documentation, networking, filesystems, header file updates, core kernel code..). Nothing particular stands out, although I do like seeing how some ancient drivers are getting put out to pasture (*cough* isdn *cough*).

As usual even the shortlog is much too big to post, so the summary below is only a list of the pull requests I merged.

Go test. Kick the tires. Be the first kid on your block running a 5.0 pre-release kernel.

Linus

The Linux and computing media did go to great lengths to offer up an explanation for the version numbering change, provided no less than by Linus himself. "The numbering change is not indicative of anything special. If you want to have an official reason, it's that I ran out of fingers and toes to count on, so 4.21 became 5.0," wrote Torvalds.

Initially, there doesn't appear to be much of anything in the new kernel that anyone would consider "earth shattering" or huge -- at least, at this early date. If you want to see a nice rundown of the new features in the 5.0-rc1 kernel, check out this Phoronix article by Phoronix founder and principal author Michael Larabel.

Given the history of other Linux kernel releases, you can probably expect to see the new kernel to hit some distributions (such as Fedora and Ubuntu) in either late February or early March.

Firefox Can Help Save You From Embarrassing Browsing History

It might be hard to find someone around who hasn't browsed to sites that they probably wouldn't want others to know about. With privacy under attack from all sides, the last thing you need is to have your web browser displaying "adult" sites or "piracy" sites you might have visited.

Most of today's browsers display a "new tab page" when you open a new tab, with icons or tiles representing frequently visited sites, mixed with tiles for sponsored sites. Owners of "sponsored" content don't want their tile appearing next to a tile representing a "steamier" site.

According to an article on Ars Technica, this feature has been in Firefox for about four years, starting with Firefox 40. Originally touted on Reddit as a Firefox Easter Egg, Firefox has a hardcoded list of over 2900 sites, where if that site appears on the list, Firefox prevents tiles of those sites from appearing on the new tab page. The list isn't in a normal URL format that you can view. Rather, the list consists of MD5 checksums or hashes of the sites. You can view them by entering resource://activity-stream/lib/FilterAdult.jsm into the address bar of a new tab. If a site hash matches one that is in the hardcoded list, that site does not get a tile on the new tab page.

While no one at Mozilla has divulged the actual list of sites, it is known that it isn't just porn sites that are listed. Piracy sites, such as Pirate Bay, are included, as well. If you paid for sponsored content to sell your DVD release of a movie, you probably wouldn't be too happy if your tile appeared next to one from a piracy site, where you could download it for free.

According to the Ars Technica article:

Even though Mozilla's monetization plans have changed over the years and suggested tiles are no longer part of the browser, the blacklisting is still there. It now prevents the forbidden sites from being included in the "top sites" and "highlights" buttons on the new-tab page.

If your computer is private, and you're the only user, you can also turn off the blacklisting of these sites. Open a new tab, enter about:config on the address bar, agree to be careful, and search for "adult" in the search bar. Change the value from the default value of true, to false, by double clicking on the "true" value.

New Security Holes Discovered In Systemd

All PCLinuxOS users ... take a collective big breath ... and repeat after me ... PHEW!

As users one of the few Linux distros around that has purposefully shunned and avoided systemd, PCLinuxOS users have dodged this bullet.

I won't write here about all the things that are wrong with systemd. That would take much more room than we have here. MUCH MORE ROOM! As for the things that are right about systemd ... well, those things are listed in the whitespace between the paragraphs of this magazine. There is no need to debate the merits and demerits of systemd here. Gauging by the posts in the PCLinuxOS forum, the views among PCLinuxOS users are pretty much universal: they are glad that systemd has no home here.

A January 10, 2019 article on ZDNet blew the whistle on the latest security holes to be found in systemd. It pointed to an email to the oss-security mailing list from Qualys Security Advisory about three security holes in systemd.

Most Linux distros that use systemd are affected. I say most, because only a very small handful are exempted (Fedora 28, OpenSuse Leap 15.0, and SUSE Linux Enterprise 15), due to the fact that their userspace is compiled with GCC's -fstack-clash-protection. The compiler option offers protection, because it helps protect against a stack clash.

Specifically, CVE-2018-16864 and CVE-2018-16865 are memory corruptions, while CVE-2018-16866 performs an out-of-bounds memory read. Any of the three allow multiple command line arguments (as in megabytes) to cause systemd-journald to crash. Once that happens, a local user can easily gain root access to the system.

RedHat has already issued patches for the first two, which are considered to be the most critical security holes.

These are not the first security flaws to be found in systemd. One, in 2017, exploited a flaw in the way that TCP packets were handled, potentially causing a DnS attack. Another one was discovered in 2015 that granted unauthorized local users root access.

Just Who Is Watching Your Ring Doorbell Video?

Do you have one of those new, fancy doorbells sold by Amazon, called Ring? (Amazon purchased the company that makes Ring in 2018 for a reported $1 billion.) If so, you're not going to like this news. Due to Ring's lax security measures, there's no telling who may have been watching your Ring's video feed in the cloud. For what it's worth, Ring has expanded from just doorbells to offering cameras in users' homes.

Ring takes a three-strike approach to compromising your privacy, according to an article that appeared on The Intercept_ on January 10, 2019.

Strike one: None of the videos, which are stored on an Amazon S3 server, are encrypted. That means that anyone who gains access has full access to those videos. You'll love the reason the videos are left unencrypted: the added cost of encryption, and lost revenue opportunities because of the restricted access to those videos. Hmmm. Just who are they intending to sell the videos to?

Strike two: Ring gave its Ukrainian based R&D people unfettered access not only to every video ever recorded by every Ring device, but it also gave them full and complete access to an accompanying database that links up every video with its user/owner.

Strike three: Ring allowed unnecessary and privileged support to customer videos by company executives and engineers in the U.S., via the company's tech support video portal. This portal gives those company executives and engineers complete, unfiltered access to users live feed video, around the clock. Only a user's email address was necessary to be able to watch the live feed from the cameras at that users house. Some company engineers even went so far as to tease other Ring engineers about who they brought home the night before, after a date. A Ring spokesperson has denied that employees have ever had access to the live stream from users, despite that claim being corroborated by multiple inside sources.

You're out!

This is the last thing users with any sense of privacy and privacy issues wants to hear, during a time when attacks on privacy are at an all time high. Ring touts providing security for its users, via the video that is captured at your front door or inside your home. Ring executives claim that they can create a passive and encompassing "neighborhood watch" to combat crime. But it doesn't seem to be a two way street when it comes to the videos that they capture -- and apparently save for all eternity.

Home Wireless Routers Don't Leverage Linux Higher Security Levels

It is probably no secret to most Linux users that Linux runs many things that we use in our daily lives. This is especially true when it comes to the firmware that runs our wireless routers.

What may come as a surprise is that, despite using Linux as the basis for their firmware, virtually none of them leverage the improved security features found in Linux for networking.

A January 4, 2019 article on ZDNet highlights the results of a study/report (PDF) by Cyber-ITL. That study reviewed the safety of the software in 28 popular home routers. The article states:

Security hardening features such as ASLR (Address Space Layout Randomization), DEP (Data Execution Prevention), RELRO (RELocation Read-Only), and stack guards have been found to be missing in a recent security audit of 28 popular home routers.

Security experts from the Cyber Independent Testing Lab (Cyber-ITL) analyzed the firmware of these routers and mapped out the percentage of firmware code that was protected by the four security features listed above.

"The absence of these security features is inexcusable," said Parker Thompson and Sarah Zatko, the two Cyber-ITL researchers behind the study.

"The features discussed in this report are easy to adopt, come with no downsides, and are standard practices in other market segments (such as desktop and mobile software)," the two added.

The authors of the study compared their results to those of Consumer Reports. While the latter found the Netgear r7000 wireless router to be best overall when it came to implementation of security features, it came in second or third in the Cyber-ITL study. The Linksys WRT32x appeared to be one of the top performers in the study. It featured 100 percent DEP coverage for all firmware binaries, 95 percent RELRO coverage, 82 percent stack guard coverage, but only a mere four percent ASLR protection. None of the routers in the study implemented all of the security hardening methods available.

Curiously, here is an excerpt from the study:

None of these safety features are difficult to enable, so the message the market should take from this is that the easiest step any brand can take to move towards a hardened and "safe" software build is to do the basics in safety and security practices for building and compiling software. At the moment, the field appears wide open.

Also, don't assume that just because one model in a vendor's offerings performed well, that other models in their line offer similar protection. For example, while the Linksys WRT32x was the top security performer, four other current Linksys models fared especially poorly in the tests.

This study only looked at the "stock" firmware that shipped with the routers. No mention was made of the open source router firmware replacements, such as DD-WRT, TomatoUSB, OpenVPN, and OpenWRT. All of the open source router firmware replacements offer not only better security, but also significant performance enhancements ... if your router is compatible.

Your Old Tweets May Leak More Private Information Than You Realized

If you're a Twitter user, you may be inadvertently leaking more information than you realize about your whereabouts through your old tweets. Starting in 2009, Twitter allowed users to geotag their tweets with their precise GPS location. In 2015, Twitter revised its geolocation policy requiring users to opt in to precision geotagging. Otherwise, under the revised Twitter policy, the GPS coordinates saved with a tweet are more generalized. There's quite a big difference between divulging that you are in Dallas, TX, and exactly where your house or place of employment is in Dallas.

A January 10, 2019 Wired article reported on a study (PDF) called "Please Forget Where I Was Last Summer: The Privacy Risks of Public Location (Meta)Data" done by a group of international researchers. The researchers plan to present their findings at the Network and Distributed System Security Symposium in February, 2019. They created a tool, called LPAuditor (L=Location, P=Privacy), to scan the precise GPS coordinates that are stored in the metadata headers of all tweets between the time Twitter started allowing geotagging and the policy change in April, 2015. Even if the coordinates are not visible to the Twitter user, or their followers, they are present in the metadata headers of every tweet during the previously specified time period. The Twitter API still allows access to the GPS coordinates stored in the metadata of those tweets.

So why is this so problematic? Well, not only can it reveal (with astounding accuracy, sometimes exceeding 90%) where a Twitter user lives, but also where they work, where they worship, which physician they see (which can reveal a LOT of information, depending on what kind of physician it is), who they see or meet up with, where they eat, where they go for drinks, and even if they frequent a particular strip club. It's easy to see why some users may want to keep this information private.

Twitter has refused to remove the geolocation data from the metadata of the tweets in the specified time range. Their explanation is that they don't want to go back and "change" tweets from years ago.

Given Twitter's history and track record, this wouldn't even come close to the worse that they have done or been accused of doing.

Firefox Cutting Off Flash Support After 2020

Just as Google and Microsoft have made similar announcements, Mozilla announced that the Adobe Flash plugin will no longer be supported after 2020. In fact, after 2020, Firefox will refuse to run the notorious plugin.

In fact, Mozilla has a schedule for eliminating Flash from Firefox. Below is an excerpt from that schedule.

Plugins are a security and performance problem for Firefox users. NPAPI plugins are an obsolete technology, and Mozilla has been moving toward a Web which doesn't need plugins. The last remaining NPAPI plugin, Adobe Flash, has announced an end-of-life plan. To support the transition away from Flash, Firefox is working with other browsers to progressively and carefully make Flash usage less common. Below is the roadmap of past and future support for plugins in Firefox.

2019: Firefox will disable the Flash plugin by default. Users will not be prompted to enable Flash, but it will still be possible to activate Flash on certain sites using browser settings.3

2020: In early 2020, Flash support will be completely removed from consumer versions of Firefox. The Firefox Extended Support Release (ESR) will continue to support for Flash until the end of 2020.

2021: When Adobe stops shipping security updates for Flash at the end of 2020, Firefox will refuse to load the plugin.

Starting with the Nightly Builds of Firefox 69, Adobe Flash will be disabled by default. Flash has long outlived its usefulness, especially with the emergence of HTML5, WebAssembly, and WebGL able to deliver a richer, more stable user experience. Because Flash runs in userspace and externally from the browser, the security nightmares are rampant. Just look back at all the security updates from Adobe over the past years for affirmation and validation of the nightmare it has caused users. With the newer technologies, things will be more secure for the end user, since everything is built into the browser to enable playback of multimedia elements.

Hooray! Hooray! Hooray! Flash cannot go away fast enough.

U.S. Police Can't Force You To Unlock Your Phone Via ANY Means

Yes, I know that laws vary widely and wildly from country to country. What may be legal in one country could possibly land you in serious trouble in another country. In the U.S., we have the Bill of Rights, which are the first 10 Amendments to the U.S. Constitution. Specifically, in this instance, people are afforded the protections of the 4th Amendment against illegal search and seizure, and the protections of the 5th Amendment, which offers protection against self incrimination.

Due to various court rulings, users are already protected from being "commanded" by police to unlock their phone (or other electronic device) using passcodes, thus a user risking self incrimination and being subjected to an illegal search of their property. Previous court rulings did not extend biometric locking devices and techniques (fingerprints, facial recognition, irises, etc.) the same protections of passcodes. Now, however, U.S. District Court Judge Kandis Westmore (Northern District of California) has extended the protections of passcodes to ALL methods of logging in.

Revealed in a January 14, 2019 article from Forbes, the change comes about because:

The order came from the U.S. District Court for the Northern District of California in the denial of a search warrant for an unspecified property in Oakland. The warrant was filed as part of an investigation into a Facebook extortion crime, in which a victim was asked to pay up or have an "embarrassing" video of them publicly released. The cops had some suspects in mind and wanted to raid their property. In doing so, the feds also wanted to open up any phone on the premises via facial recognition, a fingerprint or an iris.

The court ruling (PDF) makes these points about the case:

There are sufficient facts in the affidavit to believe that evidence of the crime will be found at the Subject Premises, so the Government has probable cause to conduct a lawful search, so long as it comports with the Fourth Amendment, If, however, law enforcement violates another constitutional right in the course of executing a warrant, it inherently renders the search and seizure unreasonable.

In addition to the search of the premises, the Government seeks an order that would allow agents executing this warrant to compel "any individual, who is found at the Subject Premises and reasonably believed by law enforcement to be a user of the device, to unlock the device using biometrie features...." (Aff. 117h.) This request is overbroad. There are two suspects identified in the affidavit, but the request is neither limited to a particular person nor a particular device.

Thus, the Court finds that the Application does not establish sufficient probable cause to compel any person who happens to he at the Subject Premises at the time of the search to provide a finger, thumb or other biometric feature to potentially unlock any unspecified digital device that may be seized during the otherwise lawful search.

Furthermore, the Government's request to search and seize all digital devices at the Subject Premises is similarly overbroad. The Government cannot be permitted to search and seize a mobile phone or other device that is on a non-suspect's person simply because they are present during an otherwise lawful search.

While the warrant is denied, any resubmission must be limited to those devices reasonably believed by law enforcement to be owned or controlled by the two suspects identified in the affidavit.

B. The Fifth Amendment Privilege

Even if probable cause exists to seize devices located during a lawful search based on a reasonable belief that they belong to a suspect, probable cause does not permit the Government to compel a suspect to waive rights otherwise afforded by the Constitution, including the Fifth Amendment right against self-incrimination.

The Fifth Amendment provides that no person "shall be compelled in any criminal case to be a witness against himself." U.S. Const, amend. V. The proper inquiry is whether an act would require the compulsion of a testimonial communication that is incriminating. See Fisher v. United States, 425 U.S. 391, 409 (1976). Here, the issue is whether the use of a suspect's biometric feature to potentially unlock an electronic device is testimonial under the Fifth Amendment.

...

Courts have an obligation to safeguard constitutional rights and cannot permit those rights to be diminished merely due to the advancement of technology.

...

For the reasons set forth above, the Government's search warrant application is DENIED. The Government may not compel or otherwise utilize fingers, thumbs, facial recognition, optical/iris, or any other biometric feature to unlock electronic devices. Furthermore, the Government may only seize those digital devices that law enforcement reasonably believes are owned and/or possessed by the two suspects named in the affidavit. The Government may submit a new search warrant application consistent with this order.

So, finally, the legal system is catching up to extend protections to technology that wasn't present or even thought of when the Constitution was originally written and ratified over 230 years ago. These protections cover the end user's rights, whether a valid search warrant is present or not.

In and of itself, this may not seem like a big case. But throughout history, seemingly trivial cases have set the tone for interpretation of laws for years and years to come. These precedents, while not linked to a huge case, become huge because of their fallout.

Inkscape Tutorial: Some Useful And Fun Extensions

by Meemaw

I saw a neat tutorial the other day that outlined several useful extensions in Inkscape. Khadis did a calendar article in January 2015 and another article in February of 2016 describing a few of them, but I thought I would review a few more. In creating your masterpiece, you never know what will be useful in making your work more efficient.

Restack

Suppose you have worked really hard arranging some objects, and suddenly decide they would look better if they were reversed? Restack can help. Select your objects and click Extensions > Arrange > Restack. In the following image, I stacked the top row left to right (left-most is on the bottom), and then I selected them all and duplicated them. I then moved the duplicates below the originals and did the restack on them. Notice that they are stacked from right to left (right-most is now on the bottom).

In the presets, there is a setting called Radial Outward, so I thought I'd try that with some Valentine's hearts that were on the cover of our February, 2018 issue. You see that radial outward places the center object on the bottom, and stacks both ways from there.

Barcodes

Khadis's article showed how to create a QR code. In Extensions > Render > Barcode, you are able to generate two other types, Classic and Data Matrix, shown here. The Classic barcodes have several kinds, depending on how much and what kind of information you need it for (written at the bottom of the barcode). The Data Matrix looks a bit like a QR Code, and is for the text Inkscape.

Grids

In this extension, you can generate different types of grids using Extensions > Render > Grids. Cartesian, Isometric and Polar grids (top, center, bottom) can be generated as well as the standard grid that looks like graph paper.

Interpolate

While I can't think of very many uses for this extension, it is kinda fun! I'm sure someone more talented than I can create a wonderful wallpaper with it. If you have two paths, click on Extensions > Generate from Path > Interpolate. If your object are different, the extension seems to form a path of one object changing to the other.

Remember, you have to have two items, and you have to make them paths using Path > Object to path. Make sure they are both chosen, then choose Interpolate using the menu directions above. You'll get the following window.

I left the Exponent at 0.0, but you can choose other numbers, even negative ones. Different Exponent settings makes the mid steps smaller and places them closer together on one end or the other.

Interpolation steps lets you choose how many intermediate objects you have, and Interpolation method causes the program to shape the intermediate objects differently. Use 1 or 2, whichever looks best to you. Live preview lets you see what the result is before you apply (when you're satisfied, remember to click Apply so your interpolation will stay after you close the window).

Fractalize

Another fun extension is found at Extensions > Modify Path > Fractalize. It kinda destroys the edges and shape of a smooth object, as shown here. I used the stacked circles, duplicated and then fractalized them.

The lower your Smoothness number is, the rougher your creation. The number for the fractal below was 0.1.

There are many more extensions in Inkscape! We'll probably see more in the future.

Configuring CUPS-PDF

by phorneker

When I print from Firefox, I noticed that there are two options for creation of PDF files. The first option allows Firefox to directly create the PDF file, i.e. Firefox will not use CUPS to print. The second option is the use of the CUPS-PDF driver.

The cups-pdf package can be installed from Synaptic, and must be installed before anything in this article will work. Note: the task-printing package will not install this by default.

The second option will print, but where is the PDF file that was created? A little Google search gave me the answer. By default, the file is stored in /var/spool/cups-pdf/, which means you have to open a terminal window and login as root (with the su command, of course), then change to that directory and copy the PDF file. The file created has root as the owner, which means we have to use the chown command on the file before we can do anything with it.

So how do we fix this? Open a terminal window and type the following:

chdir ; mkdir PDF

(if you are already in your home directory, simply type mkdir PDF)

The PDF must be in all capital letters for the configuration to work.

However, it does not have to be that way. In /etc/cups/cups-pdf.conf, the Out statement tells the CUPS-PDF driver where to store the output.

Once the directory is created, anything that was in the CUPS-PDF spooler will automatically transfer to ~/PDF.

By default, CUPS-PDF spools output to /var/spool/cups-pdf/SPOOL. Unless you have a user on your system that has "SPOOL" (in all capital letters) for a username, there is no need to change this parameter.

Filename Handling

If an application supplies a filename (or if you supply one or more filenames to the lpr -P CUPS-PDF command), the CUPS-PDF backend and driver will assign that name to the output file(s) with the PDF extension.

Filenames assigned to CUPS-PDF must have a minimum length of eight characters, but no more than 64 characters. The Truncate command in cups-pdf.conf can be changed to any length you want. The default here is 64 characters due to allow Windows machines to print to CUPS servers.

If there is a extension in the filename, CUPS-PDF will remove the extension (of three or fewer characters be default) before placing the .pdf extension on the output file. The Cut command in cups-pdf.conf can be set to any length. Truncation will happen when the extension has the same or fewer number of characters in length as the value assigned to the Cut command.

However, CUPS-PDF will not truncate the filename if Cut is set to -1, which means disable truncation of filenames. This is useful on networks that are pure UNIX, i.e. have no machines running any version of Windows, DOS or OS/2 (including ArcaOS).

Finally, if an application (such as LibreOffice) prints a untitled document, the Label command assigns "job_" followed by the job number to the filename.

If Label is set to 0, the resulting filename will be called job_<job number>.pdf where job number is the ID of the print job assigned to CUPS. (This applies to untitled documents only.)

If Label is set to 1, the resulting filename will be called job_<job number>-<filename>.pdf where filename is the name of the file assigned to the CUPS-PDF backend.

If Label is set to 2, the resulting filename will be called <filename>-job_<job number>.pdf.

The LowerCase command, when set to 1 (by default) ensures that documents printed to CUPS-PDF from DOS or Windows 3.x machines will be uniquely named so output files can be properly identified as those coming from a DOS/Windows 3.x machine. (Case adjustments in the filenames are necessary to accommodate 8.3 filenames, of which are not case sensitive.)

Once /etc/cups/cups-pdf.conf has been configured, it is a good idea to reboot PCLinuxOS to ensure the configuration changes take effect.

Once you reboot, creating PDF files is as simple as printing to the CUPS-PDF queue.

If you need to use a command line, the following command will generate PDF files from your PostScript output files.

lpr -P CUPS-PDF <filelist>

Where filelist is a list of CUPS supported filenames with the types listed in /usr/share/cups/mime/mime.types of which the following are valid for PCLinuxOS:

PostScript

PDF (which makes no sense as the files are already in PDF format to begin with)

GIF

PNG

JPEG (including JPEG 2000)

TIFF

Kodak Photo CD (the antiquated format Kodak used for its Photo CD services)

XPM (X Window System Pixmap)

XBM (X Window System Bitmap)

XWD (The X Window System screenshot format)

Sun Raster (found in pre-Oracle Solaris/SunOS installations)

ICO (Windows Icon format)

BMP (Windows Bitmap format)

PNM (portable graphics formats for almost anything graphical)

PBM (portable color bitmap graphics format)

PGM (the greyscale version of PBM)

PPM (found in some so-called Windows-only printers)

SH and CSH (shell scripting)

PL (Perl source files)

HTML, XHTML, and XML (in other words, any type of XML, treated as plain text files)

TXT (plain text files)

CSS (Those stylesheets found on websites and some web applications)

Any source code file written in any programming language

In other words, if you can open the file in a text editor or the GIMP (for graphics), you can convert it to a PDF with CUPS-PDF.

Why make PDF files in the first place?

You can view PDF files before printing them (using an application such as Okular or xpdf), saving ink and paper in the process.

PDF stands for Portable Document Format, and can be viewed, archived, or transmitted most anywhere (even faxed with the right software), and they can be printed from any copier with a port for USB flash drives.

PDF files are viewable not only on PCLinuxOS machines, but also smartphones, tablets, and electronic book readers such as the Kindle line from Amazon or the Nook line from Barnes and Noble.

If you are running DOS and Windows 3.x applications in DosBox, the only option to print is to print to a disk file, provided the application can print text and/or PostScript.

Also, if you take your PCLinuxOS laptop with you, you will be able to print wherever you are and have a set of documents for printing later after you return from your trip.

A Guided Tour Of The Data Facebook Uses To Target Ads

by Bennett Cyphers
Originally published by Electronic Frontier Foundation
Reprinted under Creative Commons 3.0 License

Last week, Pew released the results of a survey investigating how users understand Facebook's data collection practices and how they react when shown what the platform thinks it knows about them. The upshot is that 74% of users weren't aware that Facebook assembles lists of their interests and traits. 88% of respondents were assigned "categories" for advertising, which could include racial or ethnic "affinities" and political leanings. 58% of those users were "not comfortable" with the company compiling that information.

Essentially, this means that more than half of Facebook's users are unhappy with the major thrust of the company's business model--surveillance-based advertising--even after they've learned more about the info that the company has gotten from surveilling them. This is unsurprising: just knowing how you're being tracked doesn't necessarily make the tracking or the targeted ads less creepy. And while Facebook gives you some control over what data it uses to show you ads, it does not give you any way to stop the data from being collected in the first place.

We don't know what goes into determining your "categories," but it is likely grounded in the more concrete data the company knows about you: what you "like," what third-party websites and apps you use, and the physical location of your smartphone and your computer. Facebook allows advertisers to target you based on any one of these categories of data, as well as by more nebulous metrics like "similarity" to other users. Though you might not know it, much of this data is visible to average users in the Ad Preferences page. In this post, we'll go through each category of data to explain where it comes from and what it means.

What do they know?

There are four main ways Facebook collects data about you.

The first is through actions you take on Facebook platforms, like Instagram, Whatsapp, and Facebook itself, including Liking posts and clicking on ads. You can see a summary of what it knows about you this way under the "Your Interests" tab. Every time you take an action in a Facebook product, it contributes to the profile shown here. Some of the items in this list are specific companies or pages you've interacted with, and others are interests that it's attributed to you indirectly based on your actions.

Some of these pages are things I've actually clicked on, and some of them are "related to" things I've interacted with. For the record, I have no idea why it thinks I like Taylor Swift.

Further down, under "Your Information -> Your Categories," you can see more ways Facebook classifies you for advertisers. According to Pew, a majority (60%) of users are placed into 10 or more categories by Facebook, and these categories can include political and ethnic "affinities." About half of users are assigned to a political category, and 21% are assigned a "multicultural affinity" by the company.

Facebook's data about my birthday and politics -- which I have deliberately fuzzed -- are off, but its deductions about my travel habits and home (in San Francisco) are spot on.

Second, Facebook allows businesses to upload lists of people they want to reach directly with contact information. For example, if a big box store collects email addresses as part of a rewards program, it can tell Facebook to target ads at everyone it has an email for. This also allows advertisers to target people using other sources of data, like publicly-available voter records or lists of names purchased from data brokers. Facebook often processes these data in a hashed or obfuscated form, and maintains that it does not save or use them for any purpose other than this direct targeting. You can see which companies and groups have targeted you in this way under "Advertisers -> Who used a contact list added to Facebook."

The companies here have targeted me with ads using their own lists of contact information, potentially including my name, email, or phone number. Facebook lets companies link any of these identifiers to a Facebook profile to serve ads.

Third, Facebook tracks your activity on the rest of the internet. Thanks to tech like pixel tracking and Facebook's third-party ad network, Facebook can track a great deal of your activity on other websites and in different apps on your phone. According to our own research, Facebook has pixels or other cookie-sharing code on about 30% of the top 10,000 sites on the web. And according to its own marketing literature, the company's tracking tech is used in 32% of the top 500 android apps and reaches 1 billion people per month. Under "Whose website or app you've visited," you can see a list of the advertisers Facebook believes you've interacted with in this way. The data recorded here may include activity from any device or browser you've used to log in to Facebook in the past, so some of it might not actually be yours.

This kind of third-party tracking can be stopped with Privacy Badger!

Finally, Facebook can collect location data through its apps (including Instagram and Messenger), by asking to "know your location" in your browser, and by logging where you connect to the Internet. It uses that data to serve location-targeted ads as well as to determine when specific people are visiting specific brick-and-mortar stores, part of its efforts to link digital ad impressions to purchases in meatspace. Even with a good understanding of how it works, researchers have found it incredibly difficult to turn off location-based ad targeting on Facebook.

Knowledge, not power

Facebook shows you a bit of what they know about your activity, plus a limited window into who can target you with certain kinds of ads. But it doesn't give you any control over how it collects or uses your data.

Under Ad Settings, you have the option to "opt out" of seeing targeted ads in a couple of ways: you can turn off targeted ads served on Facebook using data collected off Facebook (e.g. with pixels), and you can turn off ads you see around the web that are targeted using your activity on Facebook. Both of these may help you if you're tired of the same electric toothbrush ad stalking you across cyberspace, but they do nothing to stop the collection of your data in the first place.

You can also opt out of seeing ads from individual advertisers by clicking on the little "X" in the top-right corner of each icon -- one at a time. There's no way to turn off ads from a single source in bulk. And if you want to stop advertisers from targeting you based on your location or your contact information in the future, you're out of luck.

So what good is all this? Well, we do applaud Facebook's strides towards transparency. This window into its targeted ad ecosystem is more straightforward and more granular than many of its competitors, most of whom perform the same kinds of tracking. But without meaningful ways to act on this data, the page mostly serves as a creepy reminder that Facebook follows you just about everywhere.

Luckily, you can take matters into your own hands. You can uninstall or disable Facebook's mobile apps to stop most of the company's location tracking. And you can install Privacy Badger to stop third-party tracking around the web, including through Facebook's pixels and Like buttons. The more users learn what Facebook is doing, the more they can make informed decisions about their privacy, including putting pressure on lawmakers and companies to do better.

Alternatives To Dropbox, Part 3

by Alessandro Ebersol (Agent Smith)

Continuing the series of articles on alternatives to Dropbox, I will present more options to Dropbox.

Seafile

Seafile is a file hosting software system. The files are stored on a central server and can be synchronized with personal computers and mobile devices through the Seafile client. Files can also be accessed through the web server interface. Seafile's functionality is similar to other popular services like Dropbox and Google Drive, with the major difference that Seafile is free and open source, allowing users to host their own Seafile servers without limits artificially imposed on storage space or connections from clients.

You can deploy Seafile on your own server for free using the Community Edition, which is open source, or choose the Professional Edition, which is free for three users and has an annual subscription for more users.

Seafile, however, does not offer free storage. It offers the server software and the client, and from there you set up a self hosted option, like Nextcloud. The community version offers partial functionality, and the pro version offers up to 3 free users. The pro version has annual cost.

Seafile Price Options

Pros and Cons

URL: https://www.seafile.com
Located in Beijing, China.

Mega

Mega (styled in capital letters as MEGA) is a cloud storage and file hosting service offered by Mega Limited, a company based in Auckland, NZ. The service is mainly offered through web-based applications. Mega also offers mobile applications for Windows Phone, Android and iOS.

Mega is known for its security feature, in which all files are encrypted locally, end-to-end, before being uploaded. This prevents anyone (including Mega Limited employees) from accessing files without knowledge of the password used for encryption. The service was previously noted for its 50GB storage offer for free accounts. However, this was reduced to 15 GB, with additional values only offered on a test basis that expires. Up to 8 TB are available for paid accounts. On January 20, 2018, Mega claimed to have 100 million users registered in more than 245 countries and territories, and over 40 billion files were uploaded to the service.

The site and service were launched on January 19, 2013, by Kim Dotcom, who founded the now-defunct Megaupload service. However, in 2015, Kim Dotcom left the service and said the New Zealand government had seized the stocks of a Chinese investor (who is a wanted criminal in China) and has control over the site. Mega Limited replied that the New Zealand authorities did not interfere nor oppose their operations.

In 2016, Mega Ltd. released the source code for its client-side software under the Mega Limited code review license, a software license available from GitHub.

Features

In addition to the storage features, Mega offers some extra features. Namely:

MegaChat

In February 2013, Dotcom revealed that Mega would expand its services to e-mail, chat, voice, video and mobile. In December 2014, he revealed that his company "would soon" launch a browser-based chat service. In mid-January 2015, Mega launched MegaChat in beta, marketed as an encrypted web-based alternative to applications such as Skype and FaceTime.

Browser Extension

Mega has launched a plug-in extension called MEGA Chrome Extension in 2015. It has been announced as a feature to reduce download time, improve download performance and strengthen security. Mega also released a browser extension for Firefox.

On September 5, 2018, it was reported that the extension in the Chrome Webstore was compromised by the addition of code created to steal credentials from websites and crypto-coins. The original code on the Github page was not affected.

Pros and Cons

URL: https://mega.nz/
Located in Auckland, New Zealand

Spider Oak

SpiderOak is a US-based collaboration tool, an online backup and file hosting service that allows users to access, synchronize and share, using a cloud-based server offered by a company with the same name. SpiderOak is accessible through an application for Windows, Mac and Linux computer platforms and Android mobile platforms, Maemo N900 and iOS. According to SpiderOak, the software uses encrypted cloud storage and encryption key creation on the client side so that SpiderOak employees can not access user information. SpiderOak distinguishes itself from its competition in providing encryption, provisioning for synchronization of files and folders across multiple devices, and automatic data deduplication.

The key to the Spideroak model is the idea that you have the key to encryption. (Do not lose your keys, use a password manager like Bitwarden to generate and remember. The passwords are generated locally and then used to encrypt the files) Spideroak's competitors in this field are companies that have a "Zero Knowledge" architecture (they do not know / can not know what the users' files are) therefore, can not be forced to hand them to authorities / lose them.

Some components of SpiderOak are open source and, as early as 2009, the company announced its intention that the client be fully open-source in the future. Starting in 2016, the SpiderOak ONE source code was made available only to mobile platforms, with no current plans to open the desktop client source code. The SpiderOak password manager, Encryptr, is open source; the source code of their group messaging application, Semaphor, is published to allow auditing.

In an interview in July 2014, former NSA contractor Edward Snowden recommended SpiderOak over Dropbox, citing its best protection against government surveillance.

Main Features

All data accessible in a deduplicated location

Configurable cross-platform synchronization

Preserve all historical versions and deleted files

Share folders on the web ShareRooms with RSS notifications

Retrieve files from any device connected to the Internet

Declared to use "Zero Knowledge" data encryption if you use the desktop client, that is, without sharing, Web access or mobile access. This claim, however, can not be confirmed due to the fact that the client is closed source.

Unlimited devices

A layered approach to encryption using a combination of 2048-bit RSA and 256-bit AES

Pros and Cons

URL: https://spideroak.com
Located in Chicago, IL, USA.

Next month, we will have an analysis of all of the options showed, and which ones are the best.

PCLinuxOS Family Member Spotlight: masinick

As Told by YouCanToo

What is your name/username?
masinick

How old are you?
62

Are you married, single?
Married.

How about Kids, Grandkids (names and ages)?
Katelyn: 20, Karsten: 28

Do you have pets, what is your favorite?
No, I had a dog when I grew up.

Are you retired, still working and if working, what do you do?
Retired.

Where do you call home? What is it like? IE: weather, scenery
Greenville, SC, warm and often humid; lots of wooded areas; in fact our community is called "The Woodlands".

Greenville, South Carolina

Saturday Market

Where did you go to school and what is your education level?
Public schools in Fraser, MI for elementary, middle school, and high school, undergraduate Computer Science Bachelor of Science at Michigan Tech, graduate classes in Computer Information Systems at the University of Phoenix, and Operating Systems Theory at the University of New Hampshire.

What kind of things you like doing? hobbies, travel, fishing, camping?
Music - singing, instrumental - trombone.

Why and when did you start using Linux?
1995, Slackware; I worked with others on Digital UNIX; several of us had heard of Linux; Jon Hall, then at Digital, was also promoting Linux.

What specific equipment do currently use with PCLinuxOS?
Dell Inspiron 5558.

Do you feel that your use of Linux influences the reactions you receive from your computer peers or family? If so, how?
Most of the time people pay no attention to my interests; I have set up computers running Linux on a few old computers. All they needed was to get "something working".

What would you like to see happen within PCLinuxOS that would make it a better place. What are your feelings?
We have a great community. Let's just help people out - whether with PCLinuxOS or other technology. Being a helpful person often gives credibility and may present future opportunities to use PCLinuxOS in homes, businesses, and communities.

PCLinuxOS Family Member Spotlight is an exclusive, monthly column by YouCanToo, featuring PCLinuxOS forum member. This column will allow "the rest of us" to get to know our forum family members better, and will give those featured an opportunity to share their PCLinuxOS story with the rest of the world.

If you would like to be featured in PCLinuxOS Family Member Spotlight, please send a private message to youcantoo, parnote or Meemaw in the PCLinuxOS forum expressing your interest.

One Way To Duplicate Your Installation On Another Computer

by Paul Arnote (parnote)

Linux users, as a group, tend to reuse computers that most others toss aside or discard. Often times, we purchase computers that aren't necessarily considered "cutting edge." Typically, there is a lot of life left in these computers that others relegate to the scrap heap. Even for myself, I haven't purchased a "new" computer in many years ... not counting the desktop computer I built several years from scratch. Certainly, nearly every laptop I've ever owned (except one) were either refurbs, purchased used, or were one of those "discards" that were given to me. Even my current "production" laptop (the one I use daily) is a one or two year old laptop purchased used off of Ebay.

So, from time to time, we Linux users find or receive an "upgrade" computer. Now, you have your present computer and OS installation tuned like a high performance racing machine. You have all of your favorite programs installed. Now, you want to install PCLinuxOS on your newer, upgraded computer. One of the last things you want to do is to forget to install all your favorite programs.

When you install PCLinuxOS on your newer computer, you will undoubtedly want to install from a more recent ISO or LiveCD/DVD/USB. All of your favorite programs probably aren't included on the base PCLinuxOS live media. Sure, you could remaster your current installation, but then you drag all of the old baggage from your current installation along with you, and deposit it on your new computer. And, undoubtedly and in any case, you will definitely have some "tuning" to do on your new computer.

So, along these lines, bushrang3r, a.k.a. timeth, made the following post in the PCLinuxOS forum on June 12, 2018:

Hello good people,

I'm just wondering about something and I thought I'd run this idea past everyone. Maybe it's impossible, maybe folks wouldn't find it useful, maybe they would. I'd just like to get some input into the validity / possibility of the idea.

Everyone probably knows that when you reinstall your OS, you need to install all the apps you had installed on your old install. I usually run $ rpm -qa to get a complete list of installed apps before the reinstall so I can go through it and install the same ones on the new install. However, this list is exhaustive. It includes libraries, kernels, docs, dependencies etc. and it takes quite a while to go through it and find the ones I want. I did some research and found out how to write a list of apps in /usr/share/applications to a text file but it still isn't ideal.

What if there was a way to filter apps I installed (the main executables) in synaptic to show only those e.g. Firefox, excluding its dependencies, libraries etc. and then write that list to a file, reload that file into synaptic on the new install and reinstall all the apps (and by association their dependencies too) in one hit?

Would it require some kind of tagging of rpm names in the repos so that they could be filtered? Would that be an impossible task?

Do people think it would be useful?

Two replies later, Old-Polack had what might be the best solution to the issue.

I have three scripts that, used in the order given, do just what you ask for. The first is used on the original installation that you wish to duplicate.

-------------------------- start -------------------------
#!/bin/sh
# Name: genlist
# Author: Polack
# Script to generate an existing system's installed package list
# to aid in re-installation, and upgrade.
#

rpm -qa --qf '%{NAME}\t\tinstall\n' | sort |grep -v kernel |grep -v lib > ~/installed-packages.txt

exit

---------------------------- end ---------------------------

Running this results in a text file named installed-packages.txt in your $HOME directory. Copy this to a USB flash drive for later use in the new installation. Note that it is in a form that can be used directly by Synaptic, but does not include any library or kernel packages. The next script is basically the same script, but with a different output text file, to be used on the new installation, to list the initial base installation packages.

---------------------------- start ---------------------------
#!/bin/sh
# Name: newlist
# Author: Polack
# Purpose: Script to generate a base installed package list, from a new installation,
# to aid in re-installation, and upgrade.
#

rpm -qa --qf '%{NAME}\t\tinstall\n' | sort |grep -v kernel |grep -v lib > ~/new-installed.txt

exit

---------------------------- end -----------------------------

Copy the text file from the USB flash drive into the new installation's $HOME directory so that both the installed-packages.txt and the new-installed.txt files are visible, side by side.

The last script is named difflist and generates another new file named to-install.txt, which can be used directly by Synaptic to add all the user installed packages from the original installation, without having to reinstall all the base installation included packages.

---------------------------- start ----------------------------
#!/bin/sh
# Name: difflist
# Author: Polack
# Purpose: Script to generate a package list containing
# only packages added to a default installation,
# to aid in re-installation, and upgrade.
#

diff -dHrN -- installed-packages.txt new-installed.txt |grep \< |sed "s/< //" > to-install.txt

exit

----------------------------- end -----------------------------

In Synaptic, after running the initial upgrade procedure, under File --> Read Markings... navigate to, and select, /home//to-install.txt, then click Apply.

Copy the text of each of the scripts into the text editor of your choice, save each, with the appropriate name, into a /home//bin directory (which you need to create, and will automatically be in your $PATH) and make each executable. When you copy the installed-packages.txt file to the USB flash drive, also copy your /home//bin directory to the flash drive as well, to transfer both to the new installation.

Now, by following Old-Polack's directions precisely, and executing his custom bash scripts, you can have all of your favorite programs installed in one fell swoop. I don't know about you, but whenever I've had to reinstall PCLinuxOS on a newer computer, I've always forgotten programs to install. As a result, I've always had to go back into Synaptic multiple times before finally reinstalling all my favorite programs. Had I thought of or knew about this method, it would have saved me so much time.

ms_meme's Nook: Swinging PCLOS Blues

MP3                                                                       OGG

PCLinuxOS Bonus Recipe Corner: Italian Sausage With Tomatoes And Penne

Italian Sausage with Tomatoes and Penne

Ingredients

3 cups uncooked penne pasta (9 ounces)
1 pound uncooked Italian sausage links
1/2 cup beef flavored broth (from 32-ounce carton)
1 medium yellow summer squash, cut lengthwise in half, then cut crosswise into 1/4-inch slices
2 cups grape or cherry tomatoes, cut lengthwise in half
1/4 cup chopped fresh or 1 tablespoon dried basil leaves
6 green onions, cut into 1/2-inch pieces (1/2 cup)
2 tablespoons olive or vegetable oil

Directions

1. Cook and drain pasta as directed on package.

2. Meanwhile, cut sausage crosswise into 1/4-inch slices. Spray 12-inch nonstick skillet with cooking spray; heat over medium-high heat. Add sausage; stir-fry 4 to 6 minutes or until brown. Stir in broth. Cover and cook over medium heat 5 minutes.

3. Stir in squash, tomatoes and 2 tablespoons of the basil. Heat to boiling; reduce heat. Cover and simmer 5 minutes, stirring occasionally. Stir in onions. Simmer uncovered 1 minute.

4. Toss pasta, oil and remaining 2 tablespoons basil. Divide pasta among bowls. Top with sausage mixture.

Tips:

One pound fully cooked mild Italian sausages can be used for the uncooked links.

Cut meat and vegetables into pieces of uniform size to ensure even cooking. Meat and poultry will be easier to slice if you freeze them slightly before cutting.

Shave fresh Parmesan cheese over this Italian bowl.

Configuring Late Model Epson Printers

by phorneker

Early last month, I had to purchase a new printer as my aging Epson Stylus NX-415 simply refused to feed in card stock (for making Christmas cards) from a newly purchased pack of 25 greeting cards. Attempts made included cleaning the rollers where paper was fed. (The printer can still print on regular paper and photo paper, but not card stock.)

I went to the local OfficeMax and looked at what they had in stock. (The NX-415 was purchased at Office Depot 10 years earlier. Since then, Office Depot and OfficeMax merged into one company, namely Office Depot Office Max. The local store is branded as an OfficeMax store, and I still use my Office Depot rewards card I obtained before the merger of OfficeMax with Office Depot.)

The store had a number of Brother, Canon, Hewlett-Packard and Epson models available. What I looked for was a printer that loaded paper from the top at the back of the printer. This was necessary to allow card stock to be fed to the printer. Of these, only the OfficeJet 3850 and the Epson Expression XP-440 loaded paper that way. Fortunately, both of these printers will work with PCLinuxOS.

I ended up choosing the Epson Expression XP-440 (at $49.99 on sale) over the OfficeJet 3850 for the following reasons:

The NX-415 lasted longer than any other printer of any brand that I ever owned (namely ten years).

Epson is one of the preferred brands of printers for artists and photographers.

The cost of ink is relatively inexpensive for the XP-440 when compared to the OfficeJet 3850 given the page capacity of the cartridges, and the fact that Epson's color cartridges come one color in a cartridge rather than three color inks in one cartridge as was the case for the OfficeJet 3850.

The feel of the movable parts on each was a major factor in my decision. The XP-440 simply looks well built compared to the OfficeJet 3850. The feel of the plastic on the lids and doors on the OfficeJet 3850 told me that this was cheaply built and could break at any moment. When I tried the XP-440 (and similar models), I could tell this is a printer that is going to last. The other thing that influenced my decision was the fact that the XP-440 demonstrator model was powered up and working, whereas the OfficeJet 3850 was not even connected to a power supply. (If a demonstrator is not working, how could one even know whether to trust it to work or not.)

The cost of a set of Epson 288 cartridges is less than the cost of a set of Hewlett-Packard 65 (standard capacity) cartridges (not the 65XL series).

Setting Up The XP-440 for printing

The following setup instructions are for the Expressions XP-440, and should apply to most new model Epson inkjet printers and all-in-one devices. Your mileage will vary.

What is included in the box, besides the printer, is a (industry standard) power cable, setup instructions, a set of Epson 288 ink cartridges (black, yellow, magenta and cyan), and a CD-ROM with Windows-specific utilities. For PCLinuxOS, you will not need the CD-ROM, but you will need to download Epson's ESC/P-R driver from Epson Download Center.

Here, I entered xp-440 for the product name, and selected Linux from the drop down menu labelled "Operation System". After clicking on the search button (the one with the magnifying glass), I get the following:

There are three files available for download. The first is the ESC/P-R driver.

This is what we need to download and install to print to the XP-440. Click the top button labelled "Download" and this comes up:

As we can see here, there are many Epson printers that are supported with this ESC/P-R driver. Scroll to the bottom of the page and click on Accept to be able to download the RPM file. (This file should really be in the repository, as it is available in the repositories of all the other major Linux distributions.) Scroll to the bottom of the page, and select the 64-bit RPM package.

The third item at the bottom of the web page has the link to the 64-bit RPM package. You will need to have the lsb-lib64 and the task-printing packages installed from Synaptic to be able to install the Epson drivers as the drivers were compiled using Version 3.2 of the Linux Standards Base.

You can also download the .tar.gz file if you wish to compile the driver yourself. This file contains the source code for the ESC/P-R driver. (This is one of the benefits of open sourcing anything.)

(The driver also works with my NX-415 when configured as a NX-410 printer.)

Ordinarily, we would not install RPM packages from outside the repository. However, this is one case where it is necessary to install such a package in order to get things working properly. The Gutenprint drivers supplied with PCLinuxOS will not work with late model Epson printers. You need to have the ESC/P-R driver installed.

Note: Make sure the lsb-lib64 and the task-printing packages are installed before attempting to install the downloaded package.

In a terminal window (Konsole or other application), change to the directory where you downloaded the driver package and type in:

rpm -i epson-inkjet-printer-escpr-1.6.33-1lsb3.2.x86_64.rpm

to install the driver package. Now let us close the third tab that opened (for downloading the printer driver). There is another utility available that is useful, but not necessary.

The Epson Printer Utility is useful for displaying the ink levels of the ink cartridges installed in your printer. It is useful, but not necessary as you can access the same levels from the control panel on the printer.

The third package is Version 3.x of the Imagescan utility. I do not recommend downloading this package. Instead, you can download Version 2.x of the Image Scan! For Linux utility (the one I used for the NX-415) and it will work with the XP-440.

The scanning utility does work on PCLinuxOS (after modifying /etc/sane.d/epsonds.conf), but Imagescan will not work with the GIMP as Imagescan was not implemented as a GIMP plugin.

For this reason, you will need to either install iscan from the repository, or install Version 2.x of Image Scan! for Linux from Epson's website.

If you choose to install Image Scan! for Linux from Epson's download site, you realize that you are installing a package from outside the repository. This package is not supported in the forum. (Also, you will need to specify the --replacefiles option in RPM when installing the package.)

Once you downloaded and installed the necessary drivers and software, you should setup the printer according to the enclosed Startup guide, which consists of removing all shipping tape attached to the printer.

Be very careful not to touch the white ribbon cable inside the printer when removing the tape, or damage to the printer could result. This white ribbon cable links the print head and ink cartridges to the rest of the printer.

After removing all shipping tape, connect the power cord and power up the printer.

Select the language (English, Spanish, French, German, etc.) for the country you live in and press OK on the control panel.

Next, open the lid using the side handles to open up the entire printer (including the flatbed scanner that is embedded into the lid). The empty ink cartridge chamber with four slots will appear allowing you to insert the ink cartridges in the following order: Black first, then yellow, then cyan and finally magenta. (Note: each cartridge has shipping tape that must be removed before use.)

The XP-440 uses 288 and 288XL cartridges, with the difference being that XL cartridges are high-capacity cartridges (in terms of the amount of ink in the cartridges).

Once the cartridges are installed in the printer, close the lid and press the Start button (the one with the vertical line inside a diamond on the button) to start priming the ink charging system.

The printer takes a few minutes to get each ink color primed for use. Meanwhile, you can load the paper into the printer.

Once the printer has finished its task and is ready to use, reboot PCLinuxOS to ensure that the printer drivers and supporting files are recognized by CUPS at startup time.

Setup the print queue

Late model Epson printers have Wi-Fi capabilities, and it is completely optional. If you choose to setup Wi-Fi on this printer, you will be prompted to provide the ESSID of the network where the printer is to be connected, along with the type of encryption (such as WEP and WPA/PSK), and the network password. (For security reasons, I will not go into any detail here.)

A status sheet will print out indicating the success of network connectivity. This sheet will provide the IP address of the printer on your network.

You may also directly connect the printer to your PCLinuxOS machine through a USB cable. PCLinuxOS will detect the printer either way the printer is connected.

To configure the printer, open the PCLinuxOS Control Center (also called Configure Your Computer depending on which desktop environment you are using) and select Hardware from the sidebar.

Then select "Set up the printer(s)..." as shown here.

Here is my setup for the XP-440. The EPSON_XP_440_Series entry was automatically created as it detected the printer as a network printer. The EPSON-XP-440-Series entry (with dashes instead of underscores) was automatically created after I connected the printer with a USB cable. This is the print queue used when the printer is locally connected. The other queue, named XP-440-Series was manually created. (Used mainly with VirtualBox for printing services for the Windows NT 4.0 virtual machine as its LPT1: device name and configured as an Apple Color LaserWriter. The printing is done through the version of Samba supplied by the repository.)

Once the print queue is connected, it is now ready for printing.

Scanning with XP-440

To setup the XP-440 for scanning, you will need to know the USB ID for the attached printer. The lsusb command takes care of that detail. For the XP-440, the USB ID is 4dba:1114.

As the root user (type the su command and enter the administrator password), open /etc/sane.d/epkowa.conf and add the following: usb 4dba:1114 as shown:

Then save the file. The scanner should be ready to use.

Note: This file is not present if Version 3 of Imagescan is installed. This is why I recommend installing iscan or Image Scan! For Linux (Version 2).

If everything goes well, you should be able to print from LibreOffice, GIMP, and most other applications.

However, printing directly from web browsers is not guaranteed to work. This is one reason why I have a Cups-PDF queue setup on my laptop. You can print from Firefox by printing the page as a PDF first, then opening an application such as Okular to print.

This has a benefit of being able to print only pages that need to be printed, saving ink and paper. Also, not all websites are printable (much less print friendly), so it would not really make any sense to print a website that cannot be printed.

If you are using Google Chrome, Holding down the Control and Shift keys, then pressing the P key will bring up the GTK print dialog where you can select the print queue to use to print. This works for me every time I want to print from Chrome.

With that having been said, you are now ready to use your new printer.

Victory! Illinois Supreme Court Protects Biometric Privacy

by Jennifer Lynch and Adam Schwartz
Originally published by Electronic Frontier Foundation
Reprinted under Creative Commons 3.0 License

On January 25, 2019, the Illinois Supreme Court ruled unanimously that when companies collect biometric data like fingerprints or face prints without informed opt-in consent, they can be sued. Users don't need to prove an injury like identity fraud or physical harm--just losing control of one's biometric privacy is injury enough.

In Rosenbach v. Six Flags, a 14 year old brought a challenge against an amusement park for collecting his thumbprint without his informed consent, in violation of Illinois law. The law in question, the Illinois Biometric Information Privacy Act (BIPA), prohibits companies from gathering, using, or sharing biometric information without informed opt-in consent. EFF, along with ACLU, CDT, the Chicago Alliance Against Sexual Exploitation, PIRG, and Lucy Parsons Labs, filed an amicus curiae brief urging the Illinois Supreme Court to adopt a robust interpretation of BIPA.

The Illinois Supreme Court agreed with us and soundly rejected the defendants' argument that BIPA required a person to show an injury beyond loss of statutory privacy rights. The Court rejected the company's argument that violation of a privacy statute is a mere "technical violation of the law." In fact, the Court ruled, it inflicts a serious harm that supports a lawsuit.

The court recognized that, through BIPA, the legislature had codified an individual's "right to privacy in and control over their biometric identifiers and biometric information." The need to codify this right was supported by the legislature's findings that biometrics may be used to access sensitive information, but unlike other identifiers like social security numbers, biometrics are unique to each individual and can't be changed. As a result, the Court ruled, quoting the legislature: "once compromised, the individual has no recourse, is at heightened risk for identity theft, and is likely to withdraw from biometric-facilitated transactions."

For these reason, the court held a person is "clearly 'aggrieved'" under BIPA through the mere violation of the act alone:

When a private entity fails to adhere to the statutory procedures, as defendants are alleged to have done here, "the right of the individual to maintain [their] biometric privacy vanishes into thin air. The precise harm the Illinois legislature sought to prevent is then realized." This is no mere "technicality." The injury is real and significant. (Emphasis added.)

Illinois' BIPA is the strongest biometric privacy law in the United States. As biometric collection, use, and sharing become more widespread and invasive every year, it only becomes more important that private citizens can sue under laws like BIPA to protect their privacy. More businesses than ever are capturing and monetizing our biometric information. Retailers use face recognition to surveil shoppers' behavior as they move about the store, and to identify potential shoplifters. Employers use fingerprints, iris scans, and face recognition to manage employee access to company phones and computers. People have filed BIPA lawsuits against major technology companies like Facebook, Google, and Snapchat, alleging the companies applied face recognition to their uploaded photographs without their consent.

EFF and other privacy groups for years have resisted big business efforts to gut BIPA. Laws like BIPA that allow private citizens to sue are necessary for several reasons. First, biometric surveillance is a growing menace to our privacy. Our biometric information can be harvested at a distance and without our knowledge, and we often have no ability as individuals to effectively shield ourselves from this grave privacy intrusion. Second, BIPA follows in the footsteps of a host of other privacy laws that prohibit the capture of private information absent informed opt-in consent, and that define capture without notice and consent by itself as an injury. Third, allowing private lawsuits is a necessary means to ensure effective enforcement of privacy laws.

The Rosenbach case has important ramifications for another case brought under BIPA challenging Facebook's use of biometric face surveillance without users' consent. That case, In re Facebook Biometric Information Privacy Litigation (also called Patel v. Facebook), is currently on appeal in the U.S. Ninth Circuit Court of Appeals in California. Like the defendants in Rosenbach, Facebook has argued that a loss of statutory biometric privacy rights is not enough to sue a company, but instead, the plaintiff must also show additional harm. EFF and our privacy allies filed an amicus curiae brief in this case, too.

The Facebook district court rejected this argument last year, as did the Illinois Supreme Court today.

We're hopeful the Rosenbach ruling shuts down this argument once and for all. The Illinois Supreme Court cited the California Facebook case with approval and quoted from it extensively. Now it's up to the Ninth Circuit to allow that case to proceed.

PCLinuxOS Puzzled Partitions

Scrappler

Download Puzzle Solutions Here!

Sudoku

Download Puzzle Solutions Here!

Crossword

Download Puzzle Solutions Here!

WordFind

Download Puzzle Solutions Here!

Cryptograms

From the computer of ms_meme:
Everyday I work the daily crosswords and cryptograms in the paper. I like the cryptograms as they are wise/silly sayings of famous people.
The magazine article about secure passwords made me think of the cryptograms. We have people in the forum who are always posting famous/wise/silly sayings.
I have made a few into cryptograms, and hope our readers will enjoy them.

Download Puzzle Solutions Here!

Screenshot Showcase

Posted by b17g, January 14, 2019, running Mate

Posted by dpascal, January 16, 2019, running KDE

Posted by francesco_bat, January 21, 2019, running Trinity

Posted by gnutuxdroid, January 4, 2019, running Mate

Posted by hurricane, January 3, 2019, running Mate

Posted by Mr. Cranky Pants - YouCanToo, January 5, 2019, running KDE

Posted by ms_meme, January 13, 2019, running KDE

Posted by ShowMeRon, January 13, 2019, running KDE

Posted by tbschommer, January 9, 2019, running KDE

Posted by tuxlink, January 3, 2019, running KDE