Contents

Editorial



September 2018

Last month the feature article was about watching and recording TV using a USB TV tuner. This month's feature has quite a lot of information regarding wifi and transferring files.

I wrote a little GUI to make the above file transferring easier only to find a much faster way to achieve the same goal. Next month, if I get time, I will write a little GUI around hostapd.

During the month I stumbled across a nice little application called wavemon. It monitors your wireless connections.

I had a quick look at Barry's new release of Quirky Xerus 8.6. It's really very nice.

This month has no less than five tutorials which include creating access points, using an ftp client, a music player daemon, a guide to symbolic links and some information about moving drive icons on the desktop.

Just in case your repository does not have hostapd which is required by create_ap I have included some instructions on how to compile it yourself in the compiling section.

I've also provided some instructions on how to make a dialog display on top of others and make it permanent.

There is the usual crossword from greengeek and a wordwinder puzzle from 6502coder.

Enjoy

smokey01
Distro's

The Puppy Linux Discussion Forum is the main source for a lot of the information repeated here. Where appropriate, links will be provided so you can read first hand about the distribution development. This section will likely just provide highlights as a starting point.
Quirky Xerux 8.6

Developed by Barry Kauler

The best place to read about this distro is on Barry's blog.



This looks like a very solid distro which is what we've come to expect from Mr Kauler.
EasyOS Pyro32 32-bit 0.9.6

Developed by Barry Kauler released 22 Aug 2018

Puppy Linux forum Thread

Barry's Blog announcement
Software

This month's covers:

Wavemon, and
gFTP
wavemon

Written by smokey01

wavemon is a wireless device monitoring application that allows you to watch signal and noise levels, packet statistics, device configuration and network parameters of your wireless network hardware. It should work (though with varying features) with all devices supported by the Linux kernel.

This is a nice little package to keep an eye on your wireless networks. I found it quite easy to use and build.

Read about it here

Download the source code here



gFTP

Written by smokey01

You will generally find gFTP in all versions of Puppy. It's very small and works very well.

There are others ftp clients like FileZilla that are possibly better because they have more features but they are also much bigger. FileZilla also requires gtk3+ on it's latest versions which is not widely supported by Puppy.

Have a look at this month's tutorial on gFTP.
Tutorials

create_ap - This creates an access point.

FTP - File Transfer Protocol.

MPD - ( Music Player Daemon ) For Beginners.

A guide to symbolic links.

Placement of Desktop Icons.
Create_AP

Written by smokey01

There are a few different ways you can transfer files directly from one device to another using only wifi. This means no other network either by an ethernet cable, switch or router.

Just imagine you are sitting next to a person, both have laptops and are both are running Linux. You decide you would like to swap a large amount of photos and neither of you have an empty USB flash drive.

What is a good method of doing this?

I discovered a very nice script called create_ap provided by oblique. It can be downloaded at the link below.
https://github.com/oblique/create_ap/archive/master.zip The makefile installs the scripts into their appropriate directory which may or may not work in puppy. It does not do any compiling. I had to make a few manual changes in Fatdog.

Create_ap is a terminal package so it must be run from a terminal. Maybe I will create a GUI for it some other time.

This package does require hostapd. It should be available in your distro repository.

To see if create_ap was any good I purchased a couple of USB wifi adaptors that could do 802.11ac. I used two desktop computers, one running Fatdog64-710 and the other Fatdog64-721. I had to compile the wifi driver on each system as it was not included. The adaptors use the rtl8812au chip set and were made by Simplecom at about $AUD17.95 each.

I was able to transfer a 2.3G file between the two computers with an average of 24MBytes per second in about 99 seconds.

The best I could get with ethernet via my router was about 11MBytes per second using the same file.

I don't know about you, but I think this is very impressive.

How I did it.

Let's call the computers host and client.

On the host computer I installed create_ap and hostapd.

To transfer the files I used gftp which is an FTP Client which is bundled with every puppy I have tried. You also need to have the FTP Server running on one of the computers. Most pups, including Fatdog, use pure-ftpd as the FTP Server. It doesn't matter which computer runs the Client or Server but they need to be on different computers. In my tests I ran the Server on the Host and the FTP Client on the client computer.

If you are a control freak then make your computer the host and run create_ap and gftp, while the other computer runs pure-ftpd.

Let's not get too far ahead of ourselves. Before you run pure-ftpd or gftp you need to connect the two computers together via wifi.

To create the hotspot on the host computer using 801.11ac at 5G I typed the following into a terminal:
create_ap --freq-band="5" --ieee80211n -n wlan0 MyAccessPoint MyPassPhrase

You must use the correct wifi adaptor. If you only have one it's probably wlan0. To be sure, open a terminal and type: iwconfig. It will show you all of your wifi adaptors. If you have plugged in a USB wifi adaptor and it doesn't appear try a reboot with the adaptor plugged in. If it still doesn't show up, maybe you don't have the correct driver installed.

MyAccessPoint and MyPassPhrase can be anything you like. The client computer should see the MyAccessPoint when searching for the hotspot. To connect the client will need to use the correct MyPassPhrase (Password).

Once you have the two computers connected you can make the second connection. This is between the FTP Server and gFTP client.

The FTP Server needs to be run first or the FTP Client won't be able to see it. Most puppy's will have a menu entry to start the FTP Server. If a menu entry does not exist, open a terminal and type: pure-ftpd -EbBADHk 90

Now the FTP Client needs to connect to the FTP Server. The FTP Client needs four pieces of information:
The Host IP, Port, User and Password.

The person running the host computer will provide these details. To find the host IP, open a terminal and type ifconfig. The inet addr:192.168.12.1 is the one you're looking for. Type 192.168.12.1 into the Host Field, if that's what was displayed.

The port is normally 21.

The User is normally root.

The Password is normally woofwoof.

Now press enter or click on the network icon (two computers) to the left and the FTP Client should connect to the FTP Server.

Now all you do is highlight the file/s you wish to copy and click on the green arrow in the direction you wish to copy the files.
The green arrows are in between the two panes.
Holding the Ctrl key while clicking on files allows multiple selection.

Just remember, the left pane is the local computer. This means the computer that is running the FTP Client (gFTP). The right pane is the remote computer. You need to take some care here or you may copy files in the wrong direction.


FTP

Written by smokey01

For many FTP (File Transfer Protocol) is nothing new but for new users this could be a new and exciting experience.

Moving files from one location is a task that is done with monotonous regularity. When it's done on a single computer or device this is normally done by a file manager like Rox or the various others that are available.

It becomes a little more complicated when you want to move files between devices or even up onto a server on the cloud. What about moving files between a physical and virtual machine, this where an FTP client is really useful. Of course there are other ways as well like ssh and samba. This article will concentrate on FTP.

There are two components to FTP, a server and a client. One of the popular clients you will find in most Puppy's is gFTP. This application was written by Brian Masney way back in 1998 and from what I can see in the about box below stopped development in 2007. Although it's a little long in the tooth, it's a great little FTP client and the home page remains live.

Image 1


The gftp application looks like this:

Image 2


The second component is an FTP server which needs to be running for the FTP client to connect to. If you are going to transfer files between two local computers connected by a network the server only needs to be running on one of the computers. The FTP client can be used on either computer. Sounds confusing, keep reading, it will become clear.

For this exercise it is assumed you have two local computers and they are connected via a common router. It doesn't matter if the connection is via wifi or ethernet.

Each computer on the network will have a unique IP address. If it wasn't unique how would you find it? The IP address I'm talking about is the LAN (Local Area Network) address. Your IP's may be different but let's say Computer1 has an IP address of 192.168.12.1 and Computer2 is 192.168.12.2.

We will make Computer1 the server so we need to run the FTP server software. The most common FTP server software in many Puppy's is pure-ftp. I'm sure you will find it in the Network Menu Item. It will likely give you two options, Start and Stop. In this case click on Start. Now you should have the server running on Computer1 at IP address 192.168.12.1.

To confirm your LAN IP address, open a terminal and type ifconfig. Iook for inet addr:. What ever comes next is your LAN IP address. You may have more than one LAN IP Address but it's not normal. If you are connected via ethernet then you will see something like:

eth0 Link encap:Ethernet HWaddr ee:50:99:60:57:27
inet addr:192.168.12.1 Bcast:10.1.1.255 Mask:255.255.255.0
inet6 addr: ff80::d250:88ff:fe60:4727/64 Scope:Link
inet6 addr: fd1d:f36d:32da:0:d250:99ff:fe60:4727/64 Scope:Global
inet6 addr: 2001:44c8:267:b500:d250:99ff:fe60:4727/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10128 errors:0 dropped:4 overruns:0 frame:0
TX packets:6470 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8460928 (8.0 MiB) TX bytes:650358 (635.1 KiB)

Note the bold characters on the second line.

Now we need to connect to the server with the FTP client. On Computer2 run gftp.

Pay attention to this part of gftp:



The host is the server. The port number is normally 21 but it can be different but the server must use the same port number. The default user in Puppy is root and the default password is woofwoof.

You can either click on the icon or press enter to connect.

The local files will be displayed in the left pane and remote files in the right.

Now you simply highlight the files you wish to transfer and click on one of the the arrows between the panes. Ctrl + left mouse click will allow multiple selection.
MPC Part 1

MPD ( Music Player Daemon ) For Beginners by Terry Schuster

( Part A - Server Side )


There are a number of applications which can stream audio over a local network (LAN) and even beyond. This makes it convenient to centralise the storage of music files and to select and play those files on a separate computer/laptop/phone on the same network. All of which is essentially independent of any other processes operating on the host computer. Streaming can reduce the need to download music files to other devices for personal use in the home, as one can use spare mobile phones to access the music via wifi.

A dedicated Raspberry Pi is often used as a streaming server , which can be run headless (w/o keyboard & monitor). However, it could be a better option to use an existing computer which is often running, especially one with Puppy Linux which it could be claimed, is the OS of choice for just about everything by Puppy enthusiasts!

Streaming applications vary in their complexity and ease of use. MPD ( Music Player Daemon ) is a good starting point, being quite versatile and relatively easy to configure once you know some basic requirements of streaming. MPD has already been utilised in MPDPup - a standalone single purpose Puppy OS music streamer created some years ago (2011?) but apparently no longer being developed. It is (a) arguably preferable to use a more modern Puppy OS of choice and (b) helpful to understand how MPD is configured in a more simple setup, although there are claims by MPDPup users that it delivers superior sound quality. This article deals with a simple setup of MPD although there are numerous configuration items which can be adjusted as seen in the referenced user manuals.

MPD is a music player Daemon which runs in the background, waiting for requests from client software, which can be on the same computer or other device on the same LAN. The client can either select music from the MPD Music Library or simply listen in to an already selected stream, or both. The client software can either be accessed via a CLI or GUI, the latter being preferable for beginners.

The operation of MPD is not always clear from a simple reading of the forums and literature. It must be understood that two different ports are used to control/access the music respectively. One port (typically 6600) is used by the client to control MPD – ie select tracks to play etc. It is this port that MPD chiefly listens to in order to receive instructions. The other port streams the music, which is typically port 8000.

Some client applications on mobile devices have both the controlling and listening software combined, utilising both ports. This is obvious from the setup requirements, where information about both ports is requested for configuration. MPDROID running on Android is a good example. Typical software on desktops/laptops seems to require separate software for client selection / access to the music. Accessing the music can be as simple as opening up a web browser and pointing to the address of the port (eg 8000). A static IP address for the server is useful, if not essential, for convenience. This will be dealt with in Part B (Client Side).

A suggested installation of MPD for Puppy Linux includes the following:

1) Load a suitable MPD client on the local or host machine first so all facilities can be tested.

GUI clients include Sonata, although Gnome Music Player Client (GMPC) has more features and seems easier to use. Both will happily run on a host device or on a guest device connected via a LAN. Both Sonata and GMPC are in the Puppy package Manager.
There are suitable CLI clients, such as mpc or ncmpc, although the use of a GUI makes the process easier.

2) Load MPD from the PPM.
Check that installation has been successful by running the following in the terminal: mpd –version (that’s double minus+version) which should yield screenfulls of information.

3) Check the existence of the following key file/folder locations FYI, and especially **:
**Configuration file- /etc/mpd.conf
Runfile to start/stop - /etc/init.d/mpd
**Main mpd folder /var/lib/mpd
Logfile - /var/log/mpd/mpd.log

Check for the existence of the default folders, files and pathways that MPD will use:
music_directory - “var/lib/mpd/music”
playlist_directory - “var/lib/mpd/playlist”
The path to the music file may need to be edited in the config file if the music folder is other than the default folder.

4) MPD will not recognize the music and playlist folders unless the permissions are changed. It makes it easier to change the mpd folder + contents (found at /var/lib/mpd).
So, in the terminal use: chmod -R ugo+rw filepath/to/mpd/folder
eg chmod -R ugo+rw /var/lib/mpd

5) Puppy Linux generates an error when mpd is run with mpd as user. There does not seem any other option than run mpd with user “root” .
Firstly, one must edit the ownership of the mpd folder (var/lib/mpd ) by using PCManFM or similar.
Secondly, the user declaration line in mpd.config file then needs to be changed from user “mpd” (to) “root” .
Thirdly, it would appear necessary to check that the line containing group parameter “nogroup” is commented with a # to avoid a run-time error.

6) The next step is to check that the ports are given permissions to receive requests for local or external hosts. This was an absolutely critical change in order to make MPD operational on a Puppy OS. While the ports may be “pinged” to see if they are “listening”, permissions are still required in the following text files: /etc/hosts.allow and /etc/hosts.deny.

In hosts.deny remove or comment (with a #) ALL:ALL
In hosts.allow change the data to:
ALL: LOCAL
SSH: ALL # in case you wish to control the host computer remotely

7) The mpd.config file then needs to be edited so as to be able to use the two required ports.

Either for localhost use, uncomment / leave as is : bind_to_address "localhost"
OR for localhost use & LAN use uncomment / change to: bind_to_address "any"

AND uncomment / leave as is: port "6600" This is the port used to control MPD.
AND ensure all other binding configuration lines are commented out unless otherwise required.


8) Should you wish to hear the sound being played on the local or host computer, MPD must be instructed to send the audio to your on-board audio controller. As this is likely to be ALSA in a Puppy Linux OS, setup the config file as follows:

audio_output {

type "alsa"
name "My ALSA Device"
# device "hw:0,0" # optional
# mixer_type "hardware" # optional – hardware or software
# mixer_device "default" # optional
# mixer_control "PCM" # optional
# mixer_index "0" # optional
}


9) The MPD config file must then be setup to output audio to a HTTP browser connected to your LAN. There can be other concurrent outputs, eg to Pulse audio or a Shout server, or even further HTTPD ports (eg 8001 etc).

A typical configuration setup for httpd is as follows:

audio_output {
type "httpd"
name "My HTTP Stream" # whatever name you choose
encoder "lame" # optional - vorbis or lame only
port "8000" # audio is picked up via a web browser from this port
# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 - ( suggest it is left unchanged )
quality "5.0" # do not define if bitrate is defined
# bitrate "128" # do not define if quality is defined
format "44100:24:2" # (sample rate:bits:channels)
max_clients "3" # optional 0=no limit – 3 in this case
}


10) MPD then needs to be started or restarted. In the terminal, use: /etc/init.d/mpd start
After the first start, MPD should run automatically on bootup.
Should it be started without first stopping, an error message will result.
MPD can be stopped via /etc/init.d/mpd stop
To effect configuration changes, MPD can be stopped / started again via /etc/init.d/mpd restart

11) Once run, MPD will generate a tag_cache file, found at /var/lib/mpd/tag_cache.
This needs to have permissions changed from owner to anybody so mpd can write to it.

12) Check MPD is running via pProcess manager ( search for mpd )
OR check the ports are listening: netstat -nlp | grep mpd
* Outputs should have been set to LISTEN on ports 6600 and 8000
If MPD is not running, this command will not output anything.

13) The MPD database now needs to be created and then brought up to date once the music files have been uploaded to the library.
Older documentation/forums suggests running mpd –create-db to create a database but this will generate an error. Apparently database creation is now done automatically at the first run if permissions are set appropriately.
To update the database, use the terminal command mpd update.
A message in the terminal should confirm a successful update.

Part B will focus upon the client side of the operation and setting up a static IP address on the LAN.

References:

MPDPup http://murga-linux.com/puppy/viewtopic.php?t=70052
http://www.murga-linux.com/puppy/viewtopic.php?t=81984
http://chiselapp.com/user/ldolse/repository/mpdPup/index

Raspberry Pi MPD https://www.lesbonscomptes.com/pages/raspmpd.html

Client options https://www.musicpd.org/clients/

MPD User Manual https://www.musicpd.org/doc/user/index.html
https://wiki.archlinux.org/index.php/Music_Player_Daemon

Example Config File https://raw.githubusercontent.com/MusicPlayerDaemon/MPD/master/doc/mpdconf.example
A Guide to Symbolic Links

A Guide to Symbolic Links
by 6502coder

Most users of Puppy (and other flavours of Linux) would probably admit to having an uncertain grasp of symbolic links. They know that symbolic links are "kind of like" shortcuts in MS Windows, but beyond that, well...

It's not hard to find tutorials and man pages on symbolic links, but a lot of the documentation is confusing, incomplete, and often contradictory. A lot of questions are left unanswered.

This article tries to provide the detailed explanation I've always wished somebody else had already written. I hope it will be an instructive tutorial, as well as a useful reference document, to be consulted when you need to know the dirty details that nobody can be expected to remember.

Open up a terminal session and follow along as I present command line examples. I will use yellow highlight to indicate the commands you should type. Don't type the text in pink highlight; those are just explanatory comments, so that GUI-only users won't be left out.

# cd /tmp Go to the /tmp folder (directory)
# mkdir stuff
Create a new folder named "stuff"
# cd stuff
Go into the "stuff" folder

By the way, I do not use colouring with the "ls" command. So when I use "ls", directories are distinguished from ordinary files by a trailing "/", and symbolic links have a trailing "@". If you use colouring with "ls", then you will see these distinctions rendered using different colours.


HARD LINKS

Before tackling symbolic links, we should start by reviewing hard links. A hard link is a filename and a pointer to the location of a file on a storage medium. A hard link is the kind of link that is normally created by default when we create a new file. (If you know all about hard links, you can safely skip ahead to the section on symbolic links.)

For example, after

# echo "Hello, world!" > greet.txt
This inserts the text "Hello, world!" into a file named "greet.txt"
# cat greet.txt cat prints a file to the terminal
"Hello, world!"

we have a file that contains the text "Hello, world!", and that file has a hard link that associates the name "greet.txt" with that file. Since our current working directory was /tmp/stuff when we created the file, its full pathname is /tmp/stuff/greet.txt.

The file (that is, the actual data) and its name are two separate entities. The parent directory /tmp/stuff is a kind of hotel register that records the name of the file and the location of the file itself on the storage medium. When you rename a file, as in (DON"T TYPE THIS!)

mv foo.c foo_old.c (mv moves or renames a file)

all that gets changed is the entry in the register (directory); the file itself is untouched.

You may be surprised to know that a file can have more than one name. We do this using the ln (link) command, which has this form:

ln target_filename link_filename

When we give the command

# ln greet.txt hello.txt

we create a second hard link to the "Hello, world!" file. The command says, "make the name 'hello.txt' point to the same file that 'greet.txt' points to." So we now have two names linked to the same file:

# ls ls lists the files in a folder
greet.txt hello.txt

It may look like there are two files in the current directory, but actually there's only one file, listed under two different names.

# cat hello.txt
Hello, world!

This shows that hello.txt points to the same file as greet.txt.

The various "aliases" of a file do not have to be in the same directory. After

# mkdir foo
# ln greet.txt foo/howdy.txt
# ln greet.txt foo/hello.txt


we have created two more hard links to the file. These new links live in the directory /tmp/stuff/foo:

# ls -R lists all the files in the current folder and all subfolders
.:
foo/ greet.txt hello.txt

./foo:
hello.txt howdy.txt

There's still only one file, but now it is known under four different names. Note that the name "hello.txt" has even been used twice, which we can do because the two links have distinct full pathnames: /tmp/stuff/hello.txt vs /tmp/stuff/foo/hello.txt.

If it seems bizarre that one file could be in multiple places at the same time, remember that the file itself is just a bunch of data recorded on the storage medium. We talk loosely about a file being "in" a certain directory, but what is really happening is that the file is registered in that directory under some name, along with a pointer to the location on the storage medium where the actual data can be found. (This is an oversimplification, but a technically correct explanation would require a discussion of "inodes," which is a whole another topic.)

What happens if we delete one of the hard links?

# ls
foo/ greet.txt hello.txt
# rm greet.txt rm deletes a file
# ls -R

.:
foo/ hello.txt

./foo:
hello.txt howdy.txt
# cat foo/howdy.txt
Hello, world!

The "rm greet.txt" command has deleted one of the links, but the other three links are still there and can still access the file.

Do not make the mistake of thinking that because /tmp/stuff/greet.txt was the "original" name of the file, by deleting it we would leave the other hard links "dangling," i.e. pointing to a non-existent file. All hard links that point to a given file are created equal.

We usually think of the rm command as deleting files, but actually it deletes links--it erases entries in the registry of a directory. Most of the time, a file only has one hard link, so when we delete that link, the file does indeed "disappear" since there is no longer any way to reference it. But if a file has multiple hard links, it remains accessible as long as at least one hard link to it still exists.

So even though we deleted the /tmp/stuff/greet.txt link, we can still access the file via the other three links. Similarly, we could have used the mv command to rename greet.txt or move it to a different directory, and this would have had no effect at all on the other hard links.

Since each hard link points to the same file, any changes to the file made via one hard link will also be seen when the file is accessed via a different hard link--because all the hard links point to one and the same file.

# echo "Bye, universe!" > hello.txt
# cat foo/howdy.txt

Bye, universe!

We altered /tmp/stuff/hello.txt by overwriting the previous text ("Hello, world!") with the new text "Bye, universe!" When we print out /tmp/stuff/foo/howdy.txt, we see the same change, because it points to the same file.


SYMBOLIC LINKS

So, a hard link is an entry in the registry of a directory that associates a filename with a place on the storage medium where the actual data can be found. What, then, is a symbolic link (aka "symlink")?

Basically, a symbolic link is a textual substitution. The command

ln -s target_filename link_filename

says, "Take a memo: when you see a reference to the link_filename file in the current directory, substitute the text 'target_filename'. If the resulting filename is a relative pathname, it is interpreted as being relative to the parent directory of the symlink. If it is a full pathname (i.e. it starts with '/') then it is interpreted as such. This 'memo' is recorded in the parent directory of the symlink.
A common misconception is that the substituted pathname will be interpreted as being relative to whatever is the current working directory at the time you try to access the file via the symlink. Another common misconception is that the substituted pathname will be interpreted as being relative to whatever was the current working directory when the symbolic link was created. Neither of these is true."

If that sounds like so much geek jibber-jabber--and I see no reason to think otherwise, even though I wrote it--then follow along as I elucidate symbolic links via examples.

Go to /tmp, and create a new directory /tmp/stuff2 where we'll be doing our experiments.

# cd /tmp
# mkdir stuff2
# cd stuff2


# echo "Ham and eggs" > food.txt
# ln -s food.txt meal.txt
This creates the symbolic link
# ls -l The "-l" asks for details
total 4
-rw-r--r-- 1 root root 14 Aug 1 16:33 food.txt
lrwxrwxrwx 1 root root 9 Aug 1 16:37 meal.txt -> food.txt
# cat meal.txt
Ham and eggs

On the surface, this looks just like a hard link: meal.txt seems to point to the same file as food.txt. But actually, something entirely different is happening.

When we type "cat meal.txt", the symbolic link mechanism translates "meal.txt" into "food.txt." The resulting pathname ("food.txt") is a relative pathname, so it is interpreted as being relative to the parent directory of the symlink (which is /tmp/stuff2) so the net effect is exactly the same as if we had typed "cat /tmp/stuff2/food.txt".

A handy tool when working with symbolic links is the command readlink, which shows what the replacement text is for a specified symbolic link.

# readlink meal.txt
food.txt

Although the meal.txt symbolic link is in the /tmp/stuff2 directory, we don't have to be in that directory to access the symbolic link. For example, we can access it from our root (~) directory.

# cd This moves us to our root directory
# cat /tmp/stuff2/meal.txt
Ham and eggs
# cd - Takes us back to where we were before, i.e. /tmp/stuff2
/tmp/stuff2 This is a reminder of where we have arrived

Of course, once we moved to our root directory, it was necessary to give the full pathname of meal.txt in order to access it.

This is a good place to pause and make sure you have understood what we've done so far, because things are now going to get complicated.

Mimicking our experiments with hard links, we'll now make a link in a subdirectory bar, only this time it will be a symbolic link instead of a hard link.

# mkdir bar
# ln -s food.txt bar/breakfast.txt
# ls -R

.:
bar/ food.txt meal.txt@

./bar:
breakfast.txt@

(As a reminder, the "@" denotes a symbolic link, if you are using "ls" without coloring effects.)

So far this looks similar to what we saw with hard links. But now...

# cat bar/breakfast.txt
cat: bar/breakfast.txt: No such file or directory

How can this be? Didn't we just create the symlink bar/breaktast.txt? Didn't the "ls -R" just show us the symbolic link breakfast.txt sitting in the bar subdirectory?

Yes, but remember,

ln -s food.txt bar/breakfast.txt

means, "make a note that when you see a reference to the file breakfast.txt in directory bar, you should substitute the text 'food.txt'." So "bar/breakfast.txt" becomes "food.txt". Then, because "food.txt" is a relative pathname, it is interpreted as being relative to the parent directory of the symlink--which in this case is /tmp/stuff2/bar--so we end up looking for /tmp/stuff2/bar/food.txt...but there's no such file!

(But if /tmp/stuff2/bar/food.txt is the file that doesn't exist, why does cat complain about bar/breakfast.txt being missing? The answer is that the text substitution is not performed by the shell, so "bar/breakfast.txt" is indeed the argument that cat sees. The text substitution actually takes place inside cat, probably somewhere in the open() system call.)

Perhaps you expected "bar/breakfast.txt" to get changed into "bar/food.txt". That's another misconception about how symbolic links work. Since our current working directory is /tmp/stuff2/, the pathnames bar/breakfast.txt, ./bar/breakfast.txt, and /tmp/stuff2/bar/breakfast.txt are "all references to the file breakfast.txt in directory bar", so any one of them will end up getting replaced--in its entirety--with "food.txt". The entire pathname is replaced with "food.txt", not just the "breakfast.txt" part.

So what should we have done? As we'll see below, one correct syntax would have been

ln -s ../food.txt bar/breakfast.txt

Another solution is to use a full pathname for the target. Pretending we are back in /tmp/stuff2, we could have said

ln -s /tmp/stuff2/food.txt bar/breakfast.txt

or, if we were in /tmp/stuff2/bar at the time, we could have said

ln -s /tmp/stuff2/food.txt breakfast.txt

Had we done this, then any reference to the symlink file breakfast.txt would have been translated into the unambiguous full pathname /tmp/stuff2/food.txt. However, as I'll explain later, there are times when we can't use full pathnames to specify the target file.

Now consider this:

# cd bar
# ln -s ../food.txt snack.txt
# ls

breakfast.txt@ snack.txt@
# cat snack.txt
Ham and eggs
# readlink snack.txt
../food.txt

This time we get what we wanted. The symbolic link we created says to replace a reference to the snack.txt file with "../greet.txt", which in turn is interpreted as being relative to the parent directory of the symlink--which is /tmp/stuff2/bar--so the net result is "cat /tmp/stuff2/bar/../food.txt", which amounts to "cat /tmp/stuff2/food.txt" since the descent into the the bar directory is canceled out by the "..".

Here's a further example:
# cd
# cat /tmp/stuff2/bar/snack.txt
Ham and eggs
# cd -
/tmp/stuff2/bar

In this case "/tmp/stuff2/bar/snack.txt" is converted into "../greet.txt", which is interpreted as being relative to the parent directory of the symlink (/tmp/stuff2/bar) and therefore becomes "/tmp/stuff2/bar/../food.txt" which again just amounts to "/tmp/stuff2/food.txt".

So far we have used relative pathnames to specify the symlink filename. What happens if we use a full pathname for the symbolic link?

# rm snack.txt
# ln -s ../food.txt /tmp/stuff2/bar/snack.txt
# cat snack.txt

Ham and eggs

This is no surprise. Giving the full pathname for the symbolic link simply makes it explicit that we want the symlink to be created in the /tmp/stuff2/bar directory.

With full pathnames given for both the target file and the symlink file, the current working directory could be anywhere, e.g. our root directory (~), when we create the symbolic link.

ln -s /tmp/stuff2/food.txt /tmp/stuff2/bar/snack.txt

But usually we use relative pathnames, because when we want to create a symbolic link, our current directory is usually already either the parent directory of the target or the parent directory of the symbolic link, so we can save some typing by using relative pathnames.

And now for something completely different... What happens if you try to move a symlink?

# ls
breakfast.txt@ snack.txt@
# mv snack.txt .. Move snack.txt up one folder level
# cd .. Go up one folder level
# ls
bar/ food.txt meal.txt@ snack.txt@

We've moved the snack.txt symlink so that it is now in /tmp/stuff2 rather than in /tmp/stuff2/bar.

# cat snack.txt
cat: snack.txt: No such file or directory

We've heard this song before. The symlink is sitting right there, but "cat" insists that it can't find it.

# readlink snack.txt
../food.txt

As the saying goes, "Well, there's your problem!" We originally created the snack.txt symlink with the command

ln -s ../food.txt /tmp/stuff2/bar/snack.txt

so yeah, we did indeed stipulate that "../food.txt" was to be the replacement text. But then we moved snack.txt, and no adjustment to the replacement text was made to compensate for the new location of the symlink. So when we try

cat snack.txt

the reference to snack.txt ends up being replaced with "../food.txt", which is interpreted as relative to the new location of the symlink--namely /tmp/stuff2--so we end up with "cat /tmp/stuff2/../food.txt" which amounts to "cat /tmp/food.txt" since the descent into stuff2 is canceled out by the "..". And of course, there is no such file as /tmp/food.txt.

Conclusion: you can't move a symlink. Well, you can move it, but the result is probably not going to be what you wanted.


Dangling Symlinks

Let's remind ourselves what /tmp/stuff2 looks like now:

# cd /tmp/stuff2
# ls -R
.:
bar/ food.txt meal.txt@ snack.txt@

./bar:
breakfast.txt@

# readlink meal.txt
food.txt
# cat meal.txt
Hello, world!

So the symlink meal.txt points to /tmp/stuff2/food.txt and it works as we'd expect it to. But what happens if we delete the target file?

# rm food.txt
# readlink meal.txt

food.txt

The symbolic link is still there, and it still "points" to food.txt, but now the latter is a non-existent file. We've already seen that it doesn't matter whether or not the target file actually exists when the symlink is first created (refer back to what happened with the breakfast.txt symlink). Now we see that it doesn't matter if the target file is deleted out from under a symlink. The symlink is allowed to simply dangle.

(In contrast, a "dangling" hard link is an impossibility because, if you'll recall, a file with multiple hard links can't be deleted until the last remaining hard link to it is removed.)

A dangling symlink can a perfectly sensible thing to have. For example, my Puppies usually have a ~/Doghouse directory. Sometimes I have Doghouse on a different partition from my root (~) directory. In such cases, ~/Doghouse is actually a symlink to the real Doghouse directory on the other partition. It just dangles unless and until I mount that other partition. (I haven't taken you through an example where the target is a directory rather than an ordinary file, but it works exactly the same way.) Of course, if I forget to mount the other partition, I get a nasty "not found" message when I try to access something in the Doghouse directory.

From this you can deduce the answers to two interesting questions:

1) If you can delete a target file out from under a symlink, can you also do the reverse and un-dangle the symlink by creating, or otherwise providing, the target? Yes, you can.

2) Can you create a symlink that goes across partition boundaries? Yes, you can. (Note, however, that you cannot create a hard link that goes across partition boundaries. That's another key difference between hard links and symbolic links.)


Relative vs Full (aka Absolute) Pathnames

We've seen examples suggesting that when it comes to creating symbolic links, you can get the desired results using either full pathnames or relative pathnames. Is this always true?

The answer is no. Sometimes you have to use relative pathnames.

Let's say you have a directory ABunchOfStuff, under which you have many subdirectories and subsubdirectories etc, which contain, among other things, a bunch of symlinks, all of which point to various places somewhere under ABunchOfStuff. In other words, all the symlink targets are internal to a file tree rooted at ABunchOfStuff. This is the sort of thing you might get after installing a big application, for example, or a big package of source code. One parent directory, with some internal cross-referencing going on via symlinks, often so as to avoid having duplicate files all over the place.

If you want to be able to copy or move ABunchOfStuff and everything under it to a different location--and still have everything work--then for obvious reasons, you can't use full (aka absolute) pathnames when creating your symlinks. Both your target and symlink filenames will have to be specified in terms of relative position within the ABunchOfStuff tree.

On the other hand, if you don't envision wanting or having to move a whole tree of stuff around to new location, then you can use either full or relative pathnames, or a mixture, according to taste.

Final Thoughts

The most important thing to remember when you create a symbolic link is that if the target file pathname you specify is a relative pathname, it will be interpreted as being relative to the parent directory of the symlink.

Also, be very careful if the target file pathname you give to the ln command involves shell "$" variables. You may need to enclose such a target file pathname in single quotes to keep a variable from being expanded when the symlink is created, as opposed to when the symlink is used.
Desktop drive icons placement

Written by Bigpup

The drive icons on the desktop can be moved to other locations on the desktop.
The program "Puppy Event Manager" can do this.
Puppy Event Manager>Desktop Icons>Show icons has all the options to control placement of icons on desktop.

Most options are clearly stated what they control, but let's look at what are not so clear.

Start Gap:
This controls where the line of icons start.
At what distance from the edge of desktop.
Example:
Icons are at bottom of desktop and start at left edge.
Change the start gap to higher number and the icons are placed more to the right.

Edge Gap:
This controls how far from the desktop edge the line of drive icons is.
Example:
Drive icons are at bottom left of desktop.
Make edge gap a higher number and the icons are placed higher up on the desktop.

Spacing:
This controls the spacing between the drive icons.
How far apart the icons are from each other.
Higher number more space.
Lower number less space.

Very important
Any changes made will need to be executed and saved.
Check the "refresh/Realign existing icons" and select OK.
This should delete the old desktop drive icons and replace them now using your new settings.
Compiling

This is a good section to discuss how to compile software. Compiling is not everyone's cup of tea but the more people that can manage it, the longer life Puppy will have.

The hardest part of compiling is the build recipe as there are so many options. Let's include some proven recipes here.

You must have the devx loaded as this is where most of your compiling tools reside. In some cases you may also need to have the kernel sources loaded.

This month: hostapd
hostapd

Written by smokey01

hostapd is a user space daemon for access point and authentication servers. It implements IEEE 802.11 access point management, IEEE 802.1X/WPA/WPA2/EAP Authenticators, RADIUS client, EAP server, and RADIUS authentication server. The current version supports Linux (Host AP, madwifi, mac80211-based drivers) and FreeBSD (net80211).

hostapd is designed to be a "daemon" program that runs in the background and acts as the backend component controlling authentication. hostapd supports separate frontend programs and an example text-based frontend, hostapd_cli, is included with hostapd. Read about it at https://w1.fi/hostapd/

The original source code can be downloaded here: https://w1.fi/releases/hostapd-2.6.tar.gz

I had trouble compiling the original source code so I had a peek at how jamesbond did it in Fatdog64-721.
There were seven patches and some changes to the config file. I made these modifications and have placed the modified source here in case you have trouble with the original source code.

For my modified source do the following:

Unpack the tarball.

Enter the hostapd directory and open a terminal there.

Now type: make

then

make install

If all goes well you should have hostapd compiled and installed.

In the terminal type: hostapd --help and you shoud get some output.

The devx needs to be loaded.
Scripts & Code

w2w - Connect two computers via wifi.
w2w

Written by smokey01

This month I spent quite a bit of time developing a method to transfer files from one Linux computer to another using wifi to wifi. In other words no other network connection. This research was prompted by a question from Puppy Forum member jss83.

My end result worked but it was a bit slow so I have now found a much better option using hostapd. There is an article in this edition about create_ap here.

I decided to post my results if nothing more than show some gtkdialog code of my results.

Copy the script below into a text editor and save it as w2w.

Place a copy of w2w on both computers.

The help button should provide you with enough information to get you started.




# -------------------------------- Start -----------------------------------------------
#!/bin/sh
# Written by smokey01
# Wed 15 Aug 18:40:04 ACST 2018

[ -z $GTKDIALOG ] && GTKDIALOG=gtkdialog

echo "/usr/sbin/iw
/usr/sbin/iwconfig
/sbin/ip
/usr/bin/gftp
/usr/sbin/pure-ftpd
/usr/bin/Xdialog" > /tmp/deps.txt

while read f; do
test -f "$f" || echo $f
done < /tmp/deps.txt > /tmp/missing.txt

[ ! -s /tmp/missing.txt ] || Xdialog --title "Missing Dependencies" --textbox /tmp/missing.txt 10 40
rm /tmp/missing.txt

[ ! -s $HOME/.config/wifi2wifi.conf ] && echo -e -n 'ADAPTOR="wlan0"\nCLIENTIP="169.254.34.2"\nESSID="MyAdHoc"\nFOLDER="/root"\nPASSWORD="0123456789"\nSERVERIP="169.254.34.1"' > $HOME/.config/wifi2wifi.conf

makeconfig() {
echo 'ADAPTOR="'$ADAPTOR'"
CLIENTIP="'$CLIENTIP'"
ESSID="'$ESSID'"
FOLDER="'$FOLDER'"
PASSWORD="'$PASSWORD'"
SERVERIP="'$SERVERIP'"' > /root/.config/wifi2wifi.conf
}
export -f makeconfig

. $HOME/.config/wifi2wifi.conf

for dev in `ls /sys/class/net`; do
if [ -d "/sys/class/net/$dev/wireless" ]; then
echo $dev >> /tmp/adaptors.txt
fi
done

server() {
Xdialog --infobox "Please be patient, It takes about 15 seconds to start the Server..." 0 0 3000
ip addr flush dev $ADAPTOR # Releases the address from the adaptor
sleep 1
killall wpa_supplicant > /dev/null 2>&1 # Make sure wpa_supplicant is not running
sleep 1
# Configuration
ip link set $ADAPTOR down # Brings the current network down
sleep 1
iwconfig $ADAPTOR mode master #ad-hoc # Switch the adaptor to ad-hoc mode
sleep 1
iwconfig $ADAPTOR channel 4
sleep 1
iwconfig $ADAPTOR essid $ESSID # sets essid name
sleep 1
iwconfig $ADAPTOR key $PASSWORD # add wep encryption key
# Activation
ip link set $ADAPTOR up # Brings the network up
sleep 1
ip addr add $SERVERIP/16 dev $ADAPTOR # Assign IP address
sleep 1
pure-ftpd -EbBADHk 90 # This starts the ftp server.
sleep 1
Xdialog --infobox "Server is up, Start the client..." 0 0 3000
}
export -f server

client() {
Xdialog --infobox "Please be patient, It takes about 15 seconds to Connect..." 0 0 3000
ip addr flush dev $ADAPTOR # Releases the address from the adaptor
sleep 1
killall wpa_supplicant > /dev/null 2>&1 # Make sure wpa_supplicant is not running
sleep 1
# Configuration
ip link set $ADAPTOR down # Brings the current network down
sleep 1
iwconfig $ADAPTOR mode P2P-client # ad-hoc # Switch the adaptor to ad-hoc mode
sleep 1
iwconfig $ADAPTOR channel 4
sleep 1
iwconfig $ADAPTOR essid $ESSID # sets essid name
sleep 1
iwconfig $ADAPTOR key $PASSWORD # add wep encryption key
sleep 1
# Activation
ip link set $ADAPTOR up # Brings the network up
sleep 1
ip addr add $CLIENTIP/16 dev $ADAPTOR # Assign IP address, Takes a bit of time.
sleep 5
gftp ftp://root:woofwoof@$SERVERIP:21$FOLDER
}
export -f client

help () {
DIALOG='
<window icon-name="gtk-help" title="Wifi 2 WiFi (w2w) Help" width-request="520" height-request="300">
<vbox>
<vbox border-width="5" scrollable="true">
<text wrap="false"><label>"
This application will setup your Server and Client computers so you can
send files back and forth using only your wifi. You do not need to be
connected to any other network such as a router or switch.

The application does a quick check to see if all other dependent
applications exist. A message will inform you what is missing.
If you know the dependent applications are installed but in a
different location that has been reported you may be in luck.

Place a copy of this script on both computers you wish to network.

The first action that takes place is to close wpa_supplicant if loaded
and also take your network down as it would probably be running in
infrastructure mode.

Always run the Server first. This will setup your server in ad-hoc mode
and start pure-ftp, the FTP Server.

Once you see the pop-up message informing you the server is loaded
then you can start the Client on the other computer.

The Client script sets your network to ad-hoc mode then runs gFTP which
is a nice little FTP Client. This is the tool that allows you to
transfer your files back and forth.

Each time you change a setting it is saved in a config file in:
/root/.config/wifi2wifi.conf.

Once finished make sure to click on the Quit button as this brings the
network down again.

This method is only using WEP encryption which is not very secure.
Never leave the network running when it is not required.

You may find you will have to restart your original network connection.
If you have problems then a reboot should take care of it.

Although you are able to input your own credentials, try the defaults
first as I know they work, on my computers anyway.

If you do change the credentials the essid and password must be the
same on both computers or they will not connect.

Regards

smokey01
"

</label></text>
</vbox>
<hbox homogeneous="true">
<button ok></button>
</hbox>
</vbox>
</window>
'
export DIALOG
eval $(gtkdialog -p DIALOG -c)
}
export -f help

MAIN_DIALOG='
<window icon-name="gtk-network" title="Wifi 2 WiFi (w2w) Version 1.0" width-request="300" window-position="3">
<vbox>
<hbox>
<text width-request="75">
<label>Adaptor:</label>
</text>
<comboboxentry width-request="210" tooltip-text=" This is your WiFi adaptor name ">
<variable>ADAPTOR</variable>
<input file>/tmp/adaptors.txt</input>
<default>"'$ADAPTOR'"</default>
<action>makeconfig</action>
</comboboxentry>
</hbox>

<hbox>
<text width-request="75">
<label>"EssID:"</label>
</text>
<entry tooltip-text=" Choose any name you like ">
<variable>ESSID</variable>
<default>"'$ESSID'"</default>
<action>makeconfig</action>
</entry>
</hbox>

<hbox>
<text width-request="75">
<label>Server IP:</label>
</text>
<entry tooltip-text=" Must be different to Client IP ">
<variable>SERVERIP</variable>
<default>"'$SERVERIP'"</default>
<action>makeconfig</action>
</entry>
</hbox>

<hbox>
<text width-request="75">
<label>Client IP:</label>
</text>
<entry tooltip-text=" Must be different to Server IP ">
<variable>CLIENTIP</variable>
<default>"'$CLIENTIP'"</default>
<action>makeconfig</action>
</entry>
</hbox>

<hbox>
<text width-request="75">
<label>Password:</label>
</text>
<entry tooltip-text=" You may choose your own Password ">
<variable>PASSWORD</variable>
<default>"'$PASSWORD'"</default>
<action>makeconfig</action>
</entry>
</hbox>

<hbox>
<text width-request="75">
<label>Folder:</label>
</text>
<entry fs-action="folder" tooltip-text=" Your start-up folder. ">
<variable>FOLDER</variable>
<default>"'$FOLDER'"</default>
<action>makeconfig</action>
</entry>
<button>
<input file stock="gtk-open"></input>
<action>fileselect:FOLDER</action>
</button>
</hbox>

<hbox homogeneous="true">
<button tooltip-text=" Always start the Server before the Client ">
<label>Start the Server</label>
<input file stock="gtk-network"></input>
<action>server &</action>
</button>

<button tooltip-text=" Always start the Server before the Client ">
<label>Start the Client</label>
<input file stock="gtk-apply"></input>
<action>client &</action>
</button>
</hbox>

<hbox homogeneous="true">
<button tooltip-text=" Some basic help ">
<label>Help</label>
<input file stock="gtk-help"></input>
<action>help &</action>
</button>

<button tooltip-text=" Quit the application ">
<label>Quit</label>
<input file stock="gtk-quit"></input>
<action>ip addr flush dev $ADAPTOR</action>
<action>sleep 1</action>
<action>ip link set $ADAPTOR down</action>
<action>sleep 1</action>
<action>makeconfig</action>
<action>EXIT:0</action>
</button>


</hbox>
</vbox>
</window>
'
export MAIN_DIALOG

case $1 in
-d | --dump) echo "$MAIN_DIALOG" ;;
*) $GTKDIALOG --program=MAIN_DIALOG ;;
esac

rm /tmp/adaptors.txt
stop_server=`pgrep pure-ftpd` && kill $stop_server
. $HOME/.config/wifi2wifi.conf
ip addr flush dev $ADAPTOR
ip link set $ADAPTOR down
iwconfig $ADAPTOR mode managed

# ------------------------------------- End -------------------------------------------------
Tips & Tricks

Tips & Tricks are simple little actions you can take to make your life easier when using Puppy. You will probably know most of the tips but there are always new users that don't.

Desktop Layer - Always on top

Saved Password Editor
Layer - Always on top

Written by smokey01

There are times when it would be nice if a particular application or dialog window is always open above all others. Let's assume you are running Psip waiting for a call and you are not wearing your headset. If the call dialog is hidden behind other applications you might miss the call. Below is a solution that will ensure you always see the calling dialog.

This works with the OpenBox Window Manager. Other Window Managers may have similar functionality but will probably have different commands/syntax.

Right click on the title bar of a dialog, select Layer then Always on top. This will work during the current session only.

If you want something a bit more permanent you can add the following lines to /root/.config/openbox/rc.xml.

It needs to be between the <applications> </applications> tags at the bottom of the file.

<application title="Confirm">
<layer>above</layer>
</application>


Don't confuse <applications> with <application>.

This is a good reference.

To update your changes in OpenBox you need to open the Openbox Menu Item and click on Reconfigure.

If you don't have a menu entry: Open a terminal and run openbox --reconfigure. This will make Openbox aware of the changes.
Saved Password Editor

Written by smokey01

Most browsers prompt you to save a username and password when visiting sites where login details are required. There are some sites where login details are required and the browser does not prompt you to save the details. This is quite common for banking sites which is probably not a bad idea.

This prompt usually only happens on the first visit to the site. If you choose not to save the login details it doesn't normally ask again. What if you change your mind? How do you make your browser save the details?

For Firefox and Seamonkey there is a nice little plugin/extension called Saved Password Editor. This allows you to create or edit login details for any site.

Home Page of Saved Password Editor.

To be sure it's compatible for your browser do a search from your browser. I'm using Seamonkey-2.48.

Click on Tools > Add-ons Manager then type "Saved Password Editor" in the search dialog, then install it from there. If the extension is not compatible it should warn you.

After installation an icon should be visible on the browser toolbar like below.



Saving login details is convenient but please be careful. If you lose your computer with all the usernames and passwords you may lose more than a computer. I strongly recommend you do not save any financial or important site information.
Entertainment

The September crossword by greengeek, and
Wordwinders by 6502coder
Crossword

Puppy Crossword (September 2018)
(Formatted by greengeek using the "Puzzlefast" website)

Dev tribute

Ok, last months crossword was obviously too hard for anyone to solve.

So this month we have a much easier one.

The clues lead to the names of a number of devs who, over the years, have done much to advance
Puppy and offered isos and utilities to make life easier for Puppians.

Once you have solved the crossword, you can recombine the first letters of each dev's name
to make the name of one of Puppy's most prolific and skilled GTK devs.

Who is it?


(See clues below image)

(ps: if you have any suggestions for a clue theme/topic for future crosswords please let me know!)














Scroll further down for answers:







Wordwinders

Wordwinders
by 6502coder

For each clue there is a word that can be found in the grid.
Each word starts and ends with a letter on the edge of the grid.
Consecutive letters in the word are adjacent vertically, horizontally, or diagonally. A given cell may be used by more than one word. The example grid contains the words "several" and "xenial".



Puzzle 3.

1. It turns source code into executable code.
2. It lets multiple computers share an Internet connection.
3. Core, flash, and bubble are different kinds of this.
4. Virtual private ________.


Puzzle 4.

Each clue describes a programming language. Name the inventor (not the language!)

1. Parentheses-laden language that is the second-oldest high level programming language.
2. Stack-oriented language that first became popular among astronomers.
3. Popularized by Borland and named for one of the founders of mathematical probability theory.
4. Fans call it the Internet's duct tape. Detractors say it looks like line-noise.


Spoiler Alert: answers below.















Useful Links

Puppy Linux Forums USA

Ibiblio repository USA

nluug repository Netherlands

Internode repository Australia

University of Crete repository Greece

aarnet repository Australia

Internet archive repository USA

Puppy Linux Tips by smokey01

Puppy Linux wikka Puppy sites

Bookmarkos provided by kerl

Search the Puppy Linux Forums

Barry Kauler's News Blog

labbe5 Report

Puppy Linux Icon Sets

http://lxer.com/

https://distrowatch.com/

https://www.linux-apps.com/

SecurityBaron.com
Contributors this month

Not all of the people below have physically given me the information to publish. If I find information I will give the credit where it is due. So if you see your name on the list below please don't be alarmed or upset. You are not losing your mind.

smokey01
greengeek
6502coder
bigpup
Barry Kauler
Terry Schuster

Proof reading - russoodle
Newsletter Information

Display tip:
To improve the Notecase display format please press F7 then:
- Tick the "Restore last position/size" checkbox.
- Select the "Display" tab and tick "Wrap text".

Newsletter index written by 6502coder can be found here:
http://www.murga-linux.com/puppy/viewtopic.php?p=945962#945962

Contributions

If you have information you would like to see in the newsletter please email it to smokey01 at smokey01@internode.on.net. I prefer it to be created in Notecase otherwise it makes my job a bit more difficult. I don't intend doing any significant editing but I will attempt to read all of the articles and ask a couple of others to do some proof reading. If you would like to assist in proof reading please let me know on the email address above.

Notecase is very easy to learn and use. Try and keep your articles to less than 1000 words. Photos and images should be no bigger than 1024 x 768. I can always make them smaller.

The deadline for articles is the 20th of each month. Let's not worry about time zones. I know it may be the 20th in Australia and only the 19th in the USA but I can live with this. If it's more than 24 hours late with respect to Australian CST then your article may be pushed right, into the next edition. I expect proof reading to take less than a week which will provide about four days to publish at the beginning of each month.

I will upload the Newsletter to my site at http://smokey01.com/newsletters. There will be two versions. One will be an xz compressed Notecase file and the other will be a html file so it can be read in a browser.

I have changed the original naming convention to 0001-PuppyLinuxNewsletter-Jan2017.ncd.xz and 0001-PuppyLinuxNewsletter-Jan2017.html respectively. The formatting of the html is not brilliant but readable. The newsletter is intended to be downloaded and read in Notecase.

Disclaimer

The editor has the right to veto any articles that he/she considers inappropriate. A reasonable effort will be made to avoid spelling and grammatical errors however, I'm sure some may slip through. This newsletter is published by volunteers, and is free, so please be kind. Constructive criticism and positive suggestions are welcomed.

smokey01