|
|
 |
PC Plus HelpDesk - issue 241
This month, Paul Grosse gives you more insight into
some of the topics dealt with in HelpDesk.
From the pages of HelpDesk, we look at:
- The GIMP - Why so many windows?;
- Another Free OS - Solaris 10;
- Using KNOPPIX to gather system information;
- JPEG Image Meta-information;
- Cross-platform browsing plug-ins - Flash;
- Adding a Mozilla browser plug-in in Solaris
10 as a user;
- Adding a new user;
- Avoiding JPEG Artefacts;
- JDS Gnome Panel Applications;
- System monitoring using CLI output;
- Batch files from the crontab; and,
- Regular Expressions in Perl.
And finally:
|
 |
HelpDesk
The GIMP - Why so many windows?
Some
people ask; 'Why does the GIMP have so many windows?' The
answer is that it is cross-platform and Microsoft Windows
is just one of the many operating systems it is used on.
On almost every other operating system (ie, not Macs),
you have multiple desktops.
On Windows, it looks pretty much the same as the
screen shot on the right (except that that was taken on
Gnome running on UNIX).
With Multiple desktops, you can be multi-tasking as
well as the operating system.
|
Next to the system tray, there is a little
icon that displays the position of windows on each
desktop.Numbered from the top left to the bottom
right, we are currently on desktop 5 (bottom-left).
In this way, you can interrupt a job and start another
one without having to clear your desktop - you just go to
a spare one. Also, you can arrange your work in a
specific way that allows you to make good use of all of
that extra space.
I normally work on a computer with 10 desktops
arranged as follows. Whenever I use Windows, it feels
very cramped and is not an efficient way of working at
all.
|
| Word processing |
PDF
reference
for
word counts |
Terminal |
Browser |
MP3 collection |
| The GIMP |
Spare |
Spare |
Empty screen
with special
background for
aspect ratios |
eMail client |
|
So, with images spread over several
desktops, how do we get tools and menus? If you click on
the menu at the top of each image or if you right-click
on the image itself, you get access to all of the
facilities that the GIMP affords you.Once you get used
to this minor culture change (it is nothing more, despite
what PSP users claim) it is easier to use and provides a
better organised workspace for increased efficiency.
|
Another Free OS - Solaris 10
We all know that
Windows will run on a PC - it is the default operating
system (that is to say that largely, it comes with the PC
whether you like it or not and many people are ignorant
that a PC will run any other OS). In addition to this, in
the Feedback column of PC Plus (issue 238, page 29),
Philip Nicholls points out that of all of the alternative
OSes mentioned in HelpDesk, we didn't mention OS/2.
Many of us know that other operating systems will run
on them such as the many flavours of Linux, (Philip
Nichols') OS/2, the BSD family of OSes and so on. However
there is another one that is usually associated with a
desktop machine (or more usually with mainframe machines)
that runs a special processor chip - the Sun Sparc
processor (in its various incarnations).
However, there is also a version of Solaris that will
work on x86 processors. You can download this from http://www.sun.com/
- just make sure you select Solaris 10 and click on the
Download link. You will need 4 CDs to burn it and the
installation takes a while but at the end of it, you will
have a nice, clean non-Windows installation.
|
Using KNOPPIX to gather system
information
Sometimes, you need
to know a bit about your system so that you can install
another operating system. You usually find this out when
you have run XWindows and it starts off with a 640x480
display when every other XWindows-using OS you have
installed detected it properly.
Ideally, you need to have some piece of software that
can probe your hardware and cough up the answers in a way
that will make sense to whatever it is you want to
install. Also, you need to be able to run it with your
new OS installed but leave it untouched.
KNOPPIX is good at this. You can run KInfoCenter and
ControlCenter which might tell you what you need to know
- look for the amount of memory available to the graphics
card here.
Also, if you press [Ctrl][Alt][0] (as in zero), you
will get the initial boot screen which will tell you
anything that it has found out such as the video chipset,
the monitor's horizontal and vertical scan rates, any
resolutions it might want to use and so on. Once you have
finished, press [Ctrl][Alt][5] to take you back to the
GUI and log out.
Once you have noted this, boot up your OS and go to
/usr/X11/bin/ from which you need to run xf86config.
|
JPEG Image Meta-information
There is a lot of
information stored in image files is the image file will
allow it. JPEG images can be full of information.
Right-clicking on an image will give you a drop-down
menu. If you click on Properties, you can see the form in
the screen shot on the right.
This is in Gnome, running on Solaris using the Java
Desktop. (click on it to see the full image.)
On the right, you can see the meta-data (data about
data) that is saved with an image from a digital camera.
(if you click on the image, you can see it full-sized.)
|
This is it close up. The additional
notes that you can add yourself are under the Notes tab -
right-click to see full-sized. On some operating systems
(such as the various flavours of UNIX), the default file
browser will even let you add your own comments so that
you know what the picture is about. |
This is KDE running on Linux (SuSE 8.2
professional). In addition to the metadata, there is also
room for any comments you want to write.You can see
that there are a lot of camera-based data in there. If
you edit the file - even just 'load' and 'save as', the
camera-based data are lost and replaced by image
editing-based data. Using The GIMP, the comments remain
intact though so you can edit or add to them as you go.
If you want to get a set of comments from each image you
use if you are adding several together in a montage, you
can collect the comments from the properties dialogue in
KDE or Gnome.
Note that if you receive an image that purports to be
an original - say of a crime scene - and there is no
camera-specific data there (possibly only image editor
type data) then you can, with a fair amount of
confidence, state that the image is not an original and
unless a verifiable link can be proved, the chain of
evidence has been broken. However, if you do find the
metadata there that is camera-specific, that does not
prove that the image is still the original because this
data can be place there by a hex file editor.
So, if you have been accused of parking on double
yellow lines and there is a digital photograph (or a set
of such photographs) and you are sure you were not parked
on double yellow lines, you need to demand to see the
metadata for the original photographs - if it is not
there then the chain of evidence has been broken and a
case cannot include those photographs as evidence (they
could be used as evidence in a fraud case against the
person making the claim against you though).
|
Cross-platform browsing plug-ins -
Flash
Whilst
Flash fails the Internet usability test of 'graceful
failure', it is used widely and if you do want to see
graphics, it is fairly good at providing them.
Flash, as you know, is used essentially as a browser
plug-in and like html and pdf, if a platform supports a
reader for it, you can use it regardless of the operating
system
This is the case with Macromedia Flash Player - in
this case for Linux.
|
Windows installation is usually a
downloadable executable or an installation file that is
read by a program that is already on Windows but with
Linux and a number of other OSes, it is usually a .tar.gz
file or similar.Unlike many companies that simply say
that they don't support Linux (primarily because they
can't be bothered), there are instructions on what you
should do with the Macromedia Flash Player, including
what you should type, drag and drop and where.
|
| You can find the binaries for most OSes
but ironically, at the time of writing, the Sun website
had a multi-media clip that was in a Real Media format
and I couldn't find a Real Media plug-in that was
compiled for Solaris on x86. |
Adding a Mozilla browser plug-in in
Solaris 10 as a user
There
is a difference between being a normal user and a
privileged user when it comes to installing plug-ins. If
your system already has a plug-in on it and you want to
install it locally for another user, you need to copy it
across. You could do this just by logging in as root for
a GUI session but if you have other things on the go, you
might not want to disrupt this so here is how to do it
without logging out as a normal user.
So, having already run Mozilla as the user you need to
install the plug-in as, you need create the plugins
directory which should give you a path something like...
/export/home/gecko/.mozilla/plugins
...(where 'gecko' is the name of the user in this
case) which you can do from nautilus (the file manager).
Next, you need to open up a shell and su to root so
that you can go into another directory and do the things
that we need to do.
'cd' to the existing user's plug-in directory (the one
that already has the plug-ins installed) and then copy
them to the new user's directory. You can do this fairly
easily by entering ls to get a listing of the plug-ins in
the 'plugins' directory. Next, type 'cp ' and then use
the mouse to highlight the first file name you want to
copy by double-clicking on it. Next, press
[Ctrl][Shift][C] to copy it and then [Ctrl][Shift][V] to
paste it at the command line. Next, press [Space] and
then type the path to the new user's 'plugins' directory
and then, without another space, press [Ctrl][Shift][V]
again and press [Enter]. Repeat for the other file(s) in
the directory.
Next, cd to your new plugins directory 'cd
/export/home/gecko/.mozilla/plugins' and if you type 'ls
-al', you can see that the owner of the new files is
still 'root'. You need to change them so change the owner
of the files by typing 'chown gecko' (substituting
'gecko' with your user's name) then do the trick with
copying the names of the files - repeating for each of
the files. Finally, typing 'ls -al' will show that you
have changed the owner of the files.
You are now ready to use the browser.
|
If you want to run the GUI as root, all you
need to do is create the 'plugins' subdirectory in
'.mozilla' and copy the files across by dragging and
dropping them. |
Next, highlight the one of the files,
right-click on it and select 'Properties'. |
In the properties dialogue, click on the
'Permissions' tab and then select the file owner from the
list (click on it and a list of owners will appear from
which you can select one).Repeat with the other files
in there and that is the job completed. Note that if you
try to chown with more than one file at a time with the
GUI, it will not allow you to do that - even as root.
If you've done it the GUI way, remember to log out and
then log back in again as a normal user once you have
finished - don't use a browser as root.
|
Adding a new user
Adding a new user in
a UNIX-like operating system is quite easy - arguably
easier than loading up a GUI-based program and running
that. All you need to do is add the user and give them a
password - you do that like this...
- open up a shell.
- 'su' to root because normal users shouldn't be
allowed to add new users. If you are starting off
as a root user - say you have just installed the
OS and need to create a normal user - you don't
need to su as you are already root in a shell
- add the user, along with their home directory and
their default shell and, whilst you are at it,
install any additional files needed by the system
for that user. Normally, user home directories
are in a subdirectory called '/home' (ie
'/home/gecko') although sometimes they can be in
'/u' (as in '/u/gecko') but on Solaris, they are
in '/export/home' as in '/export/home/gecko'.
To add a user, enter...
useradd -d /export/home/gecko -m -s /bin/bash gecko
Next, create a password for the new account - this has
to be done to prevent the account being used without
needing a password. Do this by entering...
passwd gecko
where you would use the user's ID instead of gecko.
The system then prompts you to input the password, and
then again, just to confirm. Note that you should not
have the [Caps Lock] key down unless you know what you
are doing when entering a password (the same with [Num
Lock] on a laptop keyboard.
If you now cd to the new directory...
cd /export/home/gecko
...and then enter 'ls -a', you should see the new
files. A quick check that all is okay with the password
file by entering 'pwck' - if all is okay, you should get
nothing as in the screen shot above - and then, if you
were not logged in as root originally, remember to enter
'exit' to get back to being a normal user - or you could
just close the shell.
Now, when you go to log in, you should be able to type
the new user ID and password and get into the new
account.
|
Avoiding JPEG Artefacts
JPEG offers a fairly
good compression on normal, photographic images and for
most of the time, it is good enough. However, when you
start trying to compress images that have a lot of local
contrast or saturation, such as with text and diagrams,
you run into problems with compression artefacts such as
dots and loss of dynamic range.
In the image on the right, you can see a very low
level of compression on the top half of the image (this
is so that it is a jpeg for your browser but not
displaying the artefacts) and on the bottom half, a
little more compression (just what you would normally
use).
With the photograph on the left (it is actually some
lichen that was growing on a stone wall) the top and the
bottom are fairly similar. However, on the right of that,
there is noticeable 'noise' added to the image around the
letters which is just not present in the upper (clean)
half. On the far right, I have squashed the middle out of
the density range of the image so that you can see what
the noise looks like when it is made more obvious.
|
On the right is a dynamic-range-exaggerated
image that has been compressed to a value of 0.8 (you may
find that the scale on your favourite image processor is
different). If you click here, you can see the two files in png
(lossless) format - before and after jpeg compression so
that you can run the dropper/pixel sampler tool over them
and see how the density changes.I have taken the clean
image (ymc1.png) and compressed it using jpeg compression
to produce the second image (ymc2.png). I have then
squashed out the middle of the dynamic range so that the
first and last eighths of the density range use the full
density range thus illustrating the loss of picture
quality.
|
Here, you can see the density range of the
the non-exaggerated jpeg compressed image (ymc2.png)
looks. The original has only WYCGMRBK so the values are
only 0 or 255. Here, they have been spread all between
(logarithmic vertical scale)So, how do you get around
this? Either you need to use a lower level of compression
or use a file format that can cope with what you are
giving it. If you want to have images that use no more
than 256 colours, you can use GIF (the patent has run out
on it now). However, if you want a lossless compression
that also handles transparency properly (if you need to
use it), use PNG.
|
JDS Gnome Panel Applications
In addition to the
usual application shortcuts that you can add to the
panel, you can also add a number of other applications
that are meant to run specifically in the panel. You add
these by right-clicking on the panel, selecting 'Add to
Panel'/ 'Accessories'/ and then the accessory you want.
There are:
- Appointments and Tasks;
- Clock;
- Dictionary Look-up;
- Sticky Notes;
- Stock Ticker; and,
- Weather Report.
In the screen shot on the right, you can see the
Weather report application (yes, that is a snow flake
with a symmetry of 4 instead of 6 - so much for the
'Standard Model'). If you right-click on the application
once you have installed it in the panel, you can select
'Preferences...' from the menu. In the 'Preferences'
dialogue box, you can change from degrees Fahrenheit to
Celcius in the 'General' tab (by checking the 'Use metric
system units' box) and under the 'Location' tab, choose
your location - here, 'Europe'/ 'United Kingdom'/
'Midlands'/ 'Birmingham' which is about as close as it
gets to Derby.
|
System monitoring using CLI output
Whilst you can use 'top' ('prstat' on Solaris) to get
details of the processes on your system, you will not get
the current PID.
You can, apart
from many other things, find out the speed that your
computers cycle through PIDs if you use a script that
tells you the PID. You can write a simple program that
tells you the current PID (ie, its PID) and here it is in
its entirety...
#!/usr/bin/perl
print localtime(time)." $$\n";
This works flawlessly on every UNIX-like OS, but
OpenBSD will give random results because the PIDs are not
allocated sequentially on OpenBSD. You could run this
repeatedly throughout the day but you are better off
running it from a crontab (see the link at the bottom of
this article).
You can monitor many things and it's often easiest to
use the system commands. Within Perl, use the following
fragment to produce an array which you can then pull
apart with regular expressions.
$rp = "df | grep c0d0s7";
@freedisk = readpipe($rp);
The nice thing about producing a program is that you
can fine-tune the regexs to give you exactly what you
want from your system, whichever OS it uses. Some useful
commands that you can pull apart are:
- Total number of processes from the process status
command. In Linux, use 'ps ax' and in OpenBSD use
'ps x'. In Solaris, use 'ps -e or 'ptree'. In all
cases, you get an array so just use the element
count $# and add one to it.
- To get the total number of instances of a
particular program, use ps in the same way as
above but pipe it to grep with the process name:
eg 'ptree | grep bash'.
- For the total number of users, count the array
elements from the 'w' command.
- Get the current uptime by using a regex on the
'uptime' command -
'm/up\s+(\d+)\sdays\s+(\d+:\d+)/'.
- Find the size of a file with the list command: eg
'ls -al /var/log/httpd/default_log'
- Find out how much free space you have on a
particular partition using the free disc space
command: eg, 'df | grep hda3' or 'df -kP /var'.
Note device names follow the patterns for:
- Linux - '/dev/hda1' or '/dev/sda1';
- OpenBSD - '/dev/wd0d'; and,
- Solaris - '/dev/dsk/c0d0s0'.
Once you have all of your information, append it to a
file or print it out using 'lpr'.
Such an example file is here. You can see how strings have been
processed. Note that rather than using fancy but cryptic
Perl code, I have generally opted for coding that allows
more people to understand what is happening.
In the directory, there is an example crontab entry
('crontab.frag'), some example output from the file
('example.output') and the status program itself.
|
Batch files from the crontab
The crontab is a really good way of running programs
automatically - you can perform your web stats, monitor
systems and do many things - but there is one aspect of
it that is easy to overlook.
When you specify a file name in the etc/crontab file,
you use the full path to it so that the system knows
where to look for it. However, it is all to easy to
develop a program or script that is intended to be run
from the crontab by using a shell that is open in the
directory within which the program or script resides,
only to forget that the crontab sets the user's home
directory as the current directory.
The way around this is to write your program
remembering that all programs it calls and paths it
refers to or even is likely to refer to implicitly,
should be the correct one from the user's home directory
(preferably an absolute path).
If you write a program that works all right in a shell
that is in the program's current directory but fails when
it is run from the crontab, you are likely to find files
and things it writes in the user's home directory
instead.
|
Regular Expressions in Perl
All of the best word processors and, if you are lucky
enough to be running UNIX (such as Solaris) or one of the
UNIX-like operating systems such as Linux or the *BSDs,
basic text editors give you access to regular
expressions. These systems - being more mature - also
come with Perl as part of the basic distribution.
We've covered regular expressions on the SuperDisc in
previous issues of PC Plus (issue 237 being most recent)
and also in my 'Learning Programming with Perl'
Masterclass series in 2005 so we don't need to go into
how to construct them here. Instead, we'll look at
several ways that they can be used:
Match
Matching a string allows us to say whether or not a
substring was in a larger string. If we have a variable
$string and we want to find out if a substring ('an' in
this case) was in it, we can simply say...
if ($string =~ m/an/) {
#do something here
};
This lets us know that the string was found. If we
were looking for one of a series of characters, we might
have
if ($string =~ m/[qwerty]/) {
#do something here
};
but here, we would not know which one was found. If we
needed a different structure in the if anonymous
subroutine for each of the characters, we could be better
off writing one for each letter (one for 'q', one for 'w'
and so on) but if the subroutine is essentially the same
(print 'the letter found was' ...) then we need to know
which. We can do this using memories. Like so...
if ($string =~ m/([qwerty])/) {
print "The letter found was $1.\n";
};
Now, we have a set of brackets around the options we
are searching for which makes Perl put the result into
memory. In the following line, we use this memory ('$1')
to produce our output. If you need more than one memory,
you just use more sets of brackets and the variables use
higher values like so...
if ($string =~ m/([qwerty])([asdfgh])/) {
print "The first letter found was $1 and\n";
print "the second letter found was $2.\n";
};
We can also use it outside an if statement in these
ways:
$1 = "";
$text =~ m/([qwert])/;
$accumulated_text .= $1;
or
$text =~ m/([qwert])/ and do{
#do something here
};
as the equivalent of 'if then'.
Search and Replace
Search and replace has the same structure as match but
you can do more with it. Like match, it can be used in
'if' statements and other control structures but it can
be used on its own. It has the form s///; where the first
part is the same as a match but the second is what is
used to replace what is matched in the first. Eg...
$text =~ s/th([ey])/m$1/;
Here we have used a memory but the initial 'th' of the
search string is not memorised. However, it is used as
the search so it is replaced. In this case, 'the' is
replaced by 'me' and 'thy' is replaced with 'my'.
You can use several memories to format strings: say to
insert thousands commas in a string like so...
1 while (s/(\d+)(\d\d\d)/$1,$2/);
Transliteration
This is a simple place-for-place replacement whereby
if the first character is found in the list, it is
replaced by the first one in the second string. So, to
produce a ROT13 transformation, just use this fragment...
tr/[a-z]/[n-za-m]/g;
You can see that when it comes across an 'a', it gets
transformed into an 'n' and so on.
|
Back to PC Plus Archive Index Page
|
|
|