LIS-3353 - Linux, Text, and Power

Remember from last time:

A question


Quick rant

Yes, I do think a *lot* of this UI/UX stuff is an enormous waste of time.
Especially since we have collectively "rediscovered"
how good language can be,
in the form of Siri, Alexa, and now ChatGPT


Quick rant, more

(a waste of time and perhaps "ableist" as well.)

Know how to make your interface "ADA compliant" or otherwise definitely works everywhere?

ONLY USE TEXT.



HUGE CONCEPT #1

All computers do is “numbers”

(but, you can store anything in numbers)

HUGE CONCEPT #1

ANYTHING IN NUMBERS
yields
HUGE(R) CONCEPT #2

HUGE(R) CONCEPT #2

All computers do is follow a very
precise list of instructions that one or
more people wrote.

Understanding Power



Computers

The smartest and dumbest things in the world.

Teaching the robots to escape

1) If there's a door in arms-reach, exit – you're done, else
2) If you can, take one step forward then goto 1), else
3) Rotate to the left until there's not a wall in front of you
then goto 1)

(this will get you out of any “regular” empty room)

An almost random bit on recursion


In computers, it's actually okay to define something with itself.
PSUEDOCODE!

(this will get you out of any “regular” empty room)


Here we go

Go to the store; if they have 2% lactose free
chocolate milk, then get me a carton.


CODE, again


The Precision, goodness


The difference between us and the computers?

We can handle a random word put in the middle
of a tacos sentence and it doesn't break us...

(but AI tho)

That was, computers are dumb.


Later: Computers are ^ very smart
able to fake being



What is "programming"


(all computer languages are for humans!)
Changing your screensaver
Writer/Word
Calc/Excel
HTML/CSS
Bash
PHP/MYSQL/Javascript
C compiled
Assembly (00 4E A3 77 8C 0A etc)

What is programming

a computer
as opposed to merely using it?

I submit:

essentially NOTHING.


Note: this is also "why Linux"

1) Free and open
2) Language/Text Based

(These two are completely related; newer stuff tries to allow for more of 2 and/or 1; e.g. Mac OS X, Android)


More on that techy flavor of "Text"

In fact

All files can be thought of as either "text" or "binary"

Can you kind of read it even though you are a human? That's "text," then.

NOTE


Mostly LOVING AI

Because it's proving that I'm right about all the above ☺


WHAT IS AN OPERATING SYSTEM EVEN



WHAT IS AN OPERATING SYSTEM EVEN


Lots of different LAYERS of software at
different levels.

OKAY, what is LINUX exactly. An


Lots of different LAYERS of software at
different levels.

(Apple/Windows just squishes them all together)

The best (and worst) part of Linux:

Choices choices choices



A rough car analogy

Linux is a Kernel

A rough car analogy

GNU is..uh this other stuff i'm not a car guy

A rough car analogy

Distros are like Models/Makes

A rough car analogy

Window Managers or Desktop Environments are like the dash


For Comparison - Windows 7?

Win 10?

Os X?



Ventura Os X?

Choices Choices Choices

Linux has MANY Different
Window Managers
used in even more different
Desktop Environments
which probably looks a lot like "different operating systems"

old KDE

Current KDE

Elementary

Raspberry Pi OS

Ubuntu

Fancy old Compiz Fanciness

OpenElec/Kodi

Kali Linux

Nokia N900

Awesome

edex-UI


Linux Mint

MX Linux



TRICKED YOU!!



lol I'm a huge nerd ☺


What is "programming"


(all computer languages are for humans!)
Changing your screensaver
Writer/Word
Calc/Excel
HTML/CSS
Bash
PHP/MYSQL/Javascript
C compiled
Assembly (00 4E A3 77 8C 0A etc)

What is coding, anyway?

Good question.
What is taught as coding is usually:
“IN THE BEGINNING”

e.g.

Sigh


maybe STEM was a mistake

What is coding anyway?

It's nearly always presented as...

print “Hello world”;

and/or

(as if you were starting from scratch)


Real Programming Languages

But perhaps we should be doing .. "scripting?"

Try to remember..

At a point in history, this was the ONLY
way to interact with the computer

AND

The "users" were the "programmers"
NO HAND HOLDING

Also — "The Unix Way"

The First Draft...

	1. Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new "features".
	2. **Expect the output of every program to become the input to another, as yet unknown, program.** Don't clutter output with extraneous information. Avoid stringently columnar or binary input formats. Don't insist on interactive input.
	3. Design and build software, even operating systems, to be tried early, ideally within weeks. Don't hesitate to throw away the clumsy parts and rebuild them.
	4. Use tools in preference to unskilled help to lighten a programming task, even if you have to detour to build the tools and expect to throw some of them out after you've finished using them.

Bash/Shell Scripting

Shell Scripting - Command line

That default thing that comes up on all the unixy-linuxy systems everywhere.

It’s a text interface. You type commands into it and the computer responds.
And it’s also a "programming" language. As in, you can type in more than one command in a row, save it to a file, and run the file. So, you know, "programming."

Names of things

Fundamental ideas:

(ignore basic programming ideas like "objects" for now)

One way to divide ALL FILES


		TEXT and BINARY. That's all, really. 

(open it in a text program like gedit or leafpad or notepad. Can you kind of read any of it?)

NOTE: Remember, frequently you can convert one to the other, e.g. ZIPs

TEXT, .e.g.

Text
HTML
XML
.ini

BINARY, e.g.


Executables (bin, exe)
ZIP
ISO
jpg
MP3
MP4


More on "Text"


A Basic Linuxy Filesystem

Shell Scripting - Command line

That default thing that comes up on all the unixy-linuxy systems everywhere.

It’s a text interface. You type commands into it and the computer responds.
And it’s also a "programming" language. As in, you can type in more than one command in a row, save it to a file, and run the file. So, you know, "programming."

Names of things

Fundamental ideas:

(ignore basic programming ideas like "objects" for now)


Again

SCRIPTING is as much about
Using programs that ALREADY EXIST TOGETHER
as it is
Making new programs.

("Libraries" on steroids?)

Users and Permissions..

..actually mean something today

ROOT – Like “Administrator” or maybe “God”
users – humans
(..and others – fake “users” to get tasks done)

Some systems (eg Ubuntu) allow for Super Users
S.U.- do “this” = sudo

CLASSIC


Permissions

Three major things you can do with files

Three important “groups”

Permissions for Directories

..are weird

(create new/delete existing files, or rename them)

Practical Permission Problems

A Basic Linuxy Filesystem


Commands in theory

Any IMPERATIVE action the computer can do. Can be one word or more.

Ultimately, will be an ORDER, usually expressible as a VERB

Are VERY closely related to (if not identical) to FUNCTIONS/METHODS

"Computer! Do THIS!"

ls

Commands in theory

Since we're in the command line we are always acting on:

FILES and/or TEXT. These will be input and/or output.

if commands are VERBS, the FILES and TEXT are the nouns/objects
We call these expressions

(and of course, the TEXT can lead you to something else, like a FOLDER)

cat file.txt
echo "Hi there"
ls "/home/mine"

Nearly every command can act on either TEXT or FILES or BOTH.

Commands in Theory

We've talked VERBS and NOUNS. But we might want to modify the operation of things;
Think ADVERBS and/or ADJECTIVES:

On the command line, these are called options

one dash + letter (ls -a)
two dashes + words (sort --reverse)

Getting Help


but seriously, Google/Duckduckgo etc

More

Check out your distro's "Software Center"
and/or
"Package Manager"

File Manipulation



Viewing Text and Files

cat - "Good" example of "efficiency" at the expense of "redundancy"
i.e. it means "concatenate" — which is to squish two files together and print to the screen. But it can also do it with just one file.

less - this is such a terribly bad joke I hate even explaning it

Let's slow down here,

because here is the power:

One way to describe cat - It "shows you the file"

BUT, let's be VERY precise here:
Cat TAKES A LINE OF TEXT (that refers to a file)..
and PRINTS IT ON THE SCREEN

TAKES A LINE OF TEXT = "Standard Input or stdin"

PRINTS IT ON THE SCREEN "Standard Output or stdout"

Pipes and Redirects

Default is to read from stdin, and write to stdout.
But by changing the default NOW YOU'RE PLAYING WITH POWER

(interesting then , cat goes from FILE to TEXT, and > goes from TEXT to FILE )

BIG OVERARCHING POINT..

THAT'S MY OPINION

If it works and its clearer to you, don't let the supernerds tell you it's a bad idea e.g.
"Useless use of cat" IS FINE

BASH

BASH (Bourne Again) Shell - others are fish and zsh, etc

Lots of “tricks” are available here, eg

and many MANY more...

BASH

Furthermore, you can modify this environment to fit your needs, via:
.bashrc
(stuff here will be run everytime you open a terminal)

A great example is the “alias” command. If a command doesn't exist for what you want to do, just ,ake up your own!

alias modbash='nano ~/.bashrc'

Newer Shells

You may see some like
"zsh" or "Zshell"
or Fish
or Oilshell

Roughly, they're a bit nicer to use, but are not "backwards compatible"
which may not matter. Feel free to try them out!

(later on, be careful when NOT using them interactively/as a REPL)


Viewing Files

IN TERMINAL

ALSO

Opening Files


COMMAND/ARGUMENT STYLE


Keeping it simple at first:


SORT

sorting text

GREP

searching text for matches

grep OPTIONS PATTERN (FILE)
Can search over FILES or STDIN
Also, can search ONE FILE or MANY (check -d or -R)
useful flags:
-i (case insensitive)
-v (invert search/show NON-matches)
-l (just show matching FILES, not lines)

(see also "ripgrep" or rg)

Classic Bash Commands

- sed
- awk
- find
- locate

Some nicer ones

head
and
tail

for getting only part of a file, by lines


tr


"Transliterate"

Easier way to do SINGLE CHARACTER deletions or transforms
(but can act on "groups," like "A-Z"

cut


Nice way to cut up lines. Just specify the "delimiter"
(the character you'll divide on)
and "which field" by number

echo "first:second:third" | cut -d ':' -f2
yields second

CLI vs GUI


Command Line Interface

vs.

Graphical User Interface
(but, why not both)

CLI, but GUIish

(hardcore nerds may distinguish and call these TUIs)

"ncurses"

From CLI to GUI


firefox http://jrm4.com
or
firefox /home/myuser/html/testindex.html

(NOTE, closing the terminal may also close the program)



Backlinks: FSU Courses:LIS3353:Raw LIS3353 Slides