skip to main content - dyslexic font - mobile - text - print

Hacker Public Radio

Your ideas, projects, opinions - podcasted.

New episodes Monday through Friday.


Dave Morriss

Host ID: 225

Old Geek, lives in Scotland, writes scripts and stuff for amusement

episodes: 20

hpr1740 :: Mailing List Etiquette

Released on 2015-04-03 under a CC-BY-SA license.

Mailing List Etiquette


In February 2015 I created a script to add a section to the monthly Community News show notes. The added section summarises the discussions on the HPR mailing list over the previous month. My script processes the messages archived on the Gmane site and reports on the threads it finds there.

In writing this script I noticed the number of times people made errors in replying to existing message threads and initiating new threads on the list. I thought it might be helpful if I explained some of the do's and don'ts of mailing list use to help avoid these errors.

Full Notes

Since the notes explaining this subject are long (the size limit is 4000 characters), they have been placed here:

Experimental EPUB Notes

For this show I have tried generating an EPUB version of the full notes. This can be found here: Comments on this idea are welcome.

  1. Gmane archive of the Hacker Public Radio mailing list:
  2. Wikipedia article on message groupings referred to as conversations, topic threads, or threads:
  3. A brief note on how to punctuate the phrase "do's and don'ts":
  4. Wikipedia article on Usenet:
  5. Thunderbird add-on ThreadVis:
  6. Wikipedia article on the RFC document:
  7. Text of RFC5322:
  8. Wikipedia article on Email:
  9. Wikipedia article on MIME used in email:
  10. Description of a threading algorithm from Jamie Zawinski:
  11. Text of RFC1153:
  12. Wikipedia article on posting style:
  13. A recent large thread on the Mailman-Users mailing list discussing the subject of replying to lists:

hpr1734 :: Vim Hints 003

Released on 2015-03-26 under a CC-BY-SA license.

Moving Around

In this episode I want to look at how you move around the file you are editing in Vim. I also want to add some more elements to the configuration file we started building in the last episode.

Full Notes

Since the notes explaining this subject are long (the size limit is 4000 characters), they have been placed here:

I usually create my notes with Markdown and pandoc. As an experiment this time I have used a pandoc template which uses the same CSS that provides the style for the main HPR pages. I hope it makes these notes look better than the very bare HTML I have produced in the past.

  1. Vim Hints Episode 1
  2. Vim Hints Episode 2

hpr1724 :: Vim Hints 002

Released on 2015-03-12 under a CC-BY-SA license.

Vim Ate my Homework

In this episode I want to look at how to keep your work secure with Vim. Next episode we will look at how to create and edit files.

Avoiding data loss with a backup

The best place to start is with the configuration file which we met last episode. As we saw, this is usually $HOME/.vimrc. However, it can also be $HOME/.vim/vimrc, which is actually recommended since it keeps all Vim files in the same place. I use the former, since that's the way I have always done it.

Let's add some options to this file. Configuration options consist of command mode commands. Actually, to be precise about it, any Vim Script expression may be written there.

First it's a good idea to ensure that Vim runs with all of its standard features enabled. The option for this is called compatible (meaning compatible with Vi), which we need to turn off. This is done with the option:

set nocompatible

Next, it's highly advisable to make Vim generate a backup file whenever it opens a file for editing. The backup file has the same name as the original file with a tilde appended. The configuration command is:

set backup

The backup file is a copy of the file which existed before editing started.

By default the backup file is saved in the same directory as the file being edited. If this is a problem (and to me this is not), then it is possible to tell Vim to save backups in a fixed place. This is done with the command set backupdir= followed by a list of directories. For example:

set backupdir=~/.backup,.,/tmp

If you were to add this to your configuration file, Vim would save backups in a top-level directory ~/.backup (which must already exist), then if this fails it will save in the current directory, falling back to /tmp if all else fails. Whether you do this is up to you. I would suggest you do not, at least not until you are more experienced with Vim.

Undoing and redoing changes

Vim can undo changes you make to a file. This is useful if a change was the wrong change or in the wrong place. It can also redo the undone change.

The u command in normal mode undoes the last change. The redo function is invoked by pressing the Ctrl key while pressing r. This key sequence is normally represented as CTRL-R.

Vim keeps a record of the changes, so successive u commands undo successive changes back in time. Conversely, CTRL-R redoes the undone changes forward in time.

Normally the change history is lost when Vim exits, but two configuration options can be used to save it. The undofile option ensures change history is written to a file and undodir shows the (pre-existing) directory which is to hold these files.

set undodir=~/.vim/undodir
set undofile

It can be a little surprising if you press u in a file you have just opened in Vim to find that it undoes something you changed last time you edited it! However, on the whole I think this is a great feature.

File recovery

The Swap File

By default Vim uses a recovery mechanism where it generates a swap file. Under Unix and Linux this file has a name built from the name of the file being edited with a dot prepended (making it a hidden file) and with the extension ".swp". So, if you were editing the file testfile the swap file would be a file called .testfile.swp in the same directory.

It is possible to make Vim write the swap file elsewhere, such as on another partition. You can also turn this recovery capability off. It is probably advisable to use the default settings while you are learning Vim.

The swap file is updated after typing 200 characters or when you have not typed anything for four seconds. The swap file is deleted as soon as Vim stops editing the file.


Case 1: there are changes in the swap file

If something bad happens during an editing session, such as the loss of power, the swap file will remain after the event. If you know that you need to recover your edit session then you can simply type the following in the directory where the file you were editing exists:

vim -r filename

You will see a message such as the following:

Using swap file ".testfile3.swp"
Original file "~/testfile3"
Recovery completed. You should check if everything is OK.
(You might want to write out this file under another name
and run diff with the original file to check for changes)
You may want to delete the .swp file now.

Press ENTER or type command to continue

See the explanation on the Vim wiki.

Alternatively, when you try to edit a file you were editing at the time of the failure Vim will detect the presence of a swap file and alert you with a message such as:

Found a swap file by the name ".testfile2.swp"
          owned by: hprdemo   dated: Fri Feb 13 15:33:41 2015
         file name: ~hprdemo/testfile2
          modified: YES
         user name: hprdemo   host name: i7-desktop
        process ID: 16181
While opening file "testfile2"
             dated: Sat Dec  6 18:34:32 2014

(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r testfile2"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".testfile2.swp"
    to avoid this message.

Swap file ".testfile2.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

Vim here is indicating that there are unsaved changes that can be recovered. It is also warning that if someone is editing the same file (such as you in another window) this might account for the presence of the swap file.

Assuming it's appropriate, you can recover the changes and continue editing by pressing r at the above prompt. You will see messages such as the ones above relating to the vim -r filename example.

Be aware that if you continue editing the original swap file will continue to exist and you will get the same message again next time you edit the file. Vim will create a new swap file (called /home/hprdemo/.testfile2.swo in this case) to protect the new editing session.

This situation can be a little confusing if you have not encountered it before. There are a number of ways you can resolve this:

  1. You can save the recovered file and exit Vim (type :wq). You can then edit the same file all over again. You will see almost the same message as before, but you can now delete the swap file by pressing d. The message you see the second time round will contain the additional warning that the file you are editing is newer than the swap file - that is because you just saved a new copy of it!

  2. You can save the file and exit Vim as above, but then explicitly delete the swap file. In the example you would do this by typing: rm .testfile2.swp

  3. As before you can save the file but this time without exiting Vim (type :w). Then tell Vim to re-edit the current file with the command :e. You will then see the warning about there being a swap file, and you can type d to delete it.

Case 2: there are no changes in the swap file

If, when you see the message about finding a swap file you see that there are no changes to recover you can just delete the swap file by pressing d. You can then continue with editing the file as normal.

Don't Panic!

This recovery process is complex because Vim is trying to ensure that you are protected against losing your changes.

As it says in the Vim manual DON'T PANIC!


  • The configuration file should contain the following:
set nocompatible
set backup
set undodir=~/.vim/undodir
set undofile
  • Use u in normal mode to undo a change
  • Use CTRL-R in normal mode to redo an undone change
  • Re-starting Vim after a crash will invoke a recovery dialogue

hpr1714 :: Vim Hints 001

Released on 2015-02-26 under a CC-BY-SA license.

Introduction to Vim

This is the start of the Vim Hints series.

As a Linux user there are many editors available to you. Which one you want to use depends on your needs and the amount of time you want to dedicate to learning how to use it.

One of the editors from the early days of Unix is vi, written in 1976. Contemporary with it is Emacs, also originating in 1976. However, it seemed to become the norm (in my experience anyway) that vi rather than Emacs was provided as standard with versions of Unix, and this has often continued into Linux.

I originally started using Unix around 1988 and found vi available to me. I learnt how to use it in a rudimentary way since I knew I'd find it on any Unix systems I came across.

Many derivatives and clones of vi have been created. The one which has become the most popular and available is Vim, the name of which is an acronym for Vi IMproved, created in 1991 by Bram Moolenaar. This is what I use, and I have not wanted to learn another editor since adopting it, even though I have experimented with several. This is the editor we will be looking at in this series.

What's the series about?

The thinking behind this series is:

  • You may already be using Vim; there are features you may not be aware of that can be revealed here
  • You may be using a different, simpler editor; you might want to use Vim and gain from its advanced features

Of course, you may prefer to learn Emacs instead. That's fine; you should choose the tool that best suits your needs. Both Emacs and Vim have quite steep learning curves, but the broad range of capabilities you gain from knowing either is considerable.

I am not an expert in Vim. In fact I am continuing to learn new Vim features on a regular basis. However, I have been using it for many years and would like to share some of what I have learnt.

Why use Vim?

With simpler editors you can move about a file, add, remove and change text and save the results. The editor might have syntax highlighting and some degree of knowledge of the programming language you are typing. You might have spell checking as well.

With Vim and other more advanced editors you have all of this and a lot more. You can perform global changes throughout a file, process many files at once, add plugins to the editor to change its behaviour, and so on. Also, there is a language behind the scenes which can be used to build extensions.

Using Vim

Usually, typing the command vi at the command line actually invokes vim. Vim runs in vi-compatible mode by default, which results in Vim enhancements being unavailable.

Vim uses a configuration file, which is called .vimrc on Linux. (Vim will also run on Windows, OSX and other operating systems but we will not be covering these implementations in this series.) Vim also has a GUI interface invoked by the command gvim, and it has its own configuration file .gvimrc.

I you don't have a .vimrc create one with touch ~/.vimrc before you start. This will stop Vim running in vi-compatible mode. We will look at what the .vimrc can be used to do later.

You can start Vim on its own without pointing at a file, but normally you use it to edit a file, which need not already exist. So, to create a new file called testfile invoke Vim with the command: vim testfile

Once running, Vim shows the contents of the file. All the lines on the screen where there is no content are marked with a tilde "~" character. If you are creating a file the first line on the screen will be blank, and last line will contain the name of the file followed by "[New File]" and some other details which we will examine later:

"testfile" [New File]       0,0-1         All

All the rest of the lines will contain a tilde.

Vim is a modal editor. The mode you usually start in is normal mode where you can move around the lines of the file and perform actions, but nothing you type is actually written to the file. In fact, the keys you type are actually editing commands. This is one of the features of Vim that causes problems for new users.

Since this is a new file there is not much you can do other than enter text, and to do this you need to switch to insert mode. Do this by pressing the i key. The message -- INSERT -- will appear on the bottom line of the screen. Now type some text, pressing the Enter key at the end of each line.

You might notice that in insert mode you can press the arrow keys and move back to text you have already typed. This is a Vim feature and was not available in the original vi editor.

When you have finished entering text, press the Esc key to exit from insert mode. Now you can move around in normal mode, but remember that the keys you press are now commands not data to be entered into the file.

To move around in normal mode use the arrow keys or the home row keyboard keys: k to move up, j to move down, h to move left and l to move right.

This brings us to the last mode we'll look at: command mode. To enter this mode press the : (colon) key in normal mode. This moves the cursor to the last line of the screen, which starts with the colon you just typed. Here you can enter another class of commands. This time, we'll just look at how you can save the file and exit Vim.

Saving the file is achieved with the w command, and to exit from Vim the q command is used. These can be typed together, so :wq writes the file and exits.

If you were to use :q on its own, having entered data into Vim, this would not work. Vim prevents you from throwing away your work this way. If you really meant to quit without saving then the q must be followed by an exclamation mark ("!"). So :q! lets you exit Vim without saving.

Summary so far

  • Vim usually starts in normal mode
  • Arrow keys or h, j, k and l for left, down, up and right for navigation in normal mode
  • i enters insert mode
  • Esc exits from insert mode and reverts to normal mode
  • : in normal mode enters command mode
  • :w in normal mode writes the file
  • :wq in normal mode writes and exits
  • :q in normal mode exits but only if nothing was changed or added
  • :q! in normal mode exits regardless of any changes


  • I was wrong about the contents of the last line of the Vim screen in the audio. The notes have been corrected.



Other resources

hpr1694 :: My APOD downloader

Released on 2015-01-29 under a CC-BY-SA license.

My APOD Downloader

Astronomy Picture of the Day

You have probably heard of the Astronomy Picture of the Day (APOD) site. It has existed since 1995, is provided by NASA and Michigan Technological University (MTU) and is created and managed by Robert Nemiroff and Jerry Bonnell. The FAQ on the site says "The APOD archive contains the largest collection of annotated astronomical images on the internet".

The Downloader

Being a KDE user I quite like a moderate amount of bling, and I particularly like to have a picture on my desktop. I like to rotate my wallpaper pictures every so often, so I want to have a collection of images. To this end I download the APOD on my server every day and make the images available through an NFS-mounted volume.

In 2012 I wrote a Perl script to perform the download, using a fairly primitive HTML parsing method. This script has been improved over the intervening years and now uses the Perl module HTML::TreeBuilder which I believe is much better at parsing HTML.

The version of the script I use myself also includes the Perl module Image::Magick which interfaces to the awesome ImageMagick image manipulation software suite. I use this to annotate the downloaded image with the title parsed from the HTML so I know what it is.

The script I am presenting here is called collect_apod_simple and does not use ImageMagick. I chose to omit it because the installation of this suite and the related Perl module can be difficult. Also, I do not feel that the annotation always works as well as it could, and I have not yet found the time to correct this shortcoming.

A version of the more advanced script (called collect_apod) is available in the same place as collect_apod_simple should you wish to give it a try. Both scripts are available on Gitorious under the link

The Code

The script itself is described in the full show notes, available here:

hpr1664 :: Life and Times of a Geek part 1

Released on 2014-12-18 under a CC-BY-SA license.

Life and Times of a Geek - part 1

I really liked David Whitman's idea of doing a show on his birthday, so I'm borrowing the idea.

This show is being released on my 65th birthday, and I decided to use this opportunity to tell you about my long experience with computational devices as part of the series "How I Found Linux". Thinking about what I want to cover, I realise that it might be quite a lot, so I'm organising the shows into a collection of short episodes.

I have been thinking about doing this for a while. Up until now I was concerned that it would be a bit self-indulgent, but I have been advised to just go ahead and do it. I hope you find the shows interesting.

The full notes for this episode are to be found here:

hpr1656 :: My audio player collection

Released on 2014-12-08 under a CC-BY-SA license.

My Audio Player Collection

I got broadband installed in my house in 2005 after I'd bought my first PC. I'd owned a lot of PCs before that, but they had all been cast-offs from the university I was working at, and I accessed the Internet via dial-up to my work.

This was around the time I got sick of listening to the radio and first discovered podcasts, and so I decided I wanted a portable audio player (or MP3 Player as they tended to be called back then).

Since then I have been listening to podcasts pretty much all of the time and have worked my way through a number of players. I thought it might be interesting if I chronicled the devices I have owned in the past 9-10 years.

The full show notes for this episode are available at: hpr1656_full_shownotes.html

hpr1648 :: Bash parameter manipulation

Released on 2014-11-26 under a CC-BY-SA license.

Bash parameter manipulation

I'm a great fan of using the Linux command line and enjoy writing shell scripts using the Bash shell.

  • BASH (or more usually Bash or bash) is the name of a Unix shell. The name stands for Bourne Again SHell, which is a play on words. Bash is an extension of the shell originally written by Stephen Bourne in 1978, usually known as SH.

  • Bash was written as part of the GNU Project which forms part of the Linux Operating System.

  • A shell is the part of the operating system that interprets commands, more commonly known as the command line.

  • A knowledge of Bash is very helpful if you would like to be able to use the power of the command line. It is also the way to learn how to build Bash scripts for automating the tasks you need to perform.

In this episode we look at what parameters are in Bash, and how they can be created and manipulated. There are many features in Bash that you can use to do this, but they are not easy to find.

As I was learning my way around Bash it took me a while to find these. Once I had found them I wanted to make a "cheat sheet" I could stick on the wall to remind me how to do things. I am sharing the result of this process with you.

The version of Bash which I used for this episode is 4.3.30(1)-release

The full notes for this episode are to be found here:

hpr1636 :: How I make coffee

Released on 2014-11-10 under a CC-BY-SA license.

My Coffee History

I'm a coffee lover. I have tried many ways of making coffee.

When I was a child my parents made their coffee in a percolator on the stove top. I remember how great it smelled though it tasted awful to me at that age.

I have owned a variety of filter machines over the years, and these have also been available at the places I have worked. They seemed to do a reasonable job, but nothing special.

One time I owned an all-glass Cona coffee maker, which was very fancy and expensive. It was too fragile for me and eventually met its end while being washed. I don't recall it making particularly wonderful coffee, but it would also make tea, which was a novelty.

I made a number of visits to Indonesia several years ago. There are a lot of pretty good coffee beans available there but the way of making a cup of coffee is not really to my taste. A good dollop of ground coffee in a large cup with boiling water added and large quantities of sugar. Straining those coffee grounds out through your teeth is not a pleasant experience.

As the fashion for the Cafetiere or French Press developed I acquired a number of these. Until recently these were all glass. I found I invariably broke them either by being over zealous when pressing down the plunger or being clumsy when washing them up. It's not a bad way of making coffee, but I have an alternative that I much prefer - the Moka Pot.

Moka Pot

A few years ago I bought a Bialetti Moka Pot. I had never heard of these before, but my son, another avid coffee drinker, pointed me to them. I bought a three-cup pot to start with. This is a small pot; the three refers to three 50ml espresso cups. I also bought a 9-cup pot which is much bigger.

My Bialetti 3-cup and 9-cup pots
Picture: My Bialetti 3-cup and 9-cup pots

The pot consists of three main elements: a base which holds the water, a funnel which holds the ground coffee and the top which holds the coffee once made. There is a gasket and a metal filter on the underside of the top part to prevent coffee grounds entering.

A disassembled Bialetti
Picture: A disassembled Bialetti

The Bialetti is heated on a gas or electric stove and forces boiling water through ground coffee under steam pressure. It makes coffee similar to but not the same as espresso coffee.

The base is filled with water just under the level of the pressure release valve.

Bialetti filled with water
Picture: Bialetti filled with water

I use Italian coffee for the Bialetti since it seems to taste better than any others I have tried.

My current favourite coffee
Picture: My current favourite coffee

Once opened I keep my coffee in a vacuum container.

Coffee in a vacuum container
Picture: Coffee in a vacuum container

The funnel is placed into the water-filled base.

Bialetti ready for coffee
Picture: Bialetti ready for coffee

The funnel takes about two scoops of coffee

Bialetti being filled with coffee
Picture: Bialetti being filled with coffee

The pot is placed on the stove. I have a gas stove and so I use a trivet for stability. I have to take care that the gas flame is not too high or the handle will melt, as has happened in the past!

Bialetti in action
Picture: Bialetti in action

You need to listen out for the bubbling sound the pot makes when the water has passed through the coffe into the top compartment. Letting the remaining steam pass through will over-heat the coffee which you do not want to happen.

Coffee is brewed
Picture: Coffee is brewed

I make a cup of coffee consisting of one part coffee, one part cold milk and one part boiling water. This makes a large cup of pretty strong yet very smooth coffee which helps to wake me up each morning.

A comforting brew in the wrong cup!
Picture: A comforting brew - in the wrong cup!

The Bialetti usually gets one use per day, after which it is washed up. Some purists say that it should only be rinsed out so that the coffee residues on the inside are not removed. I have not noticed any difference personally.


hpr1518 :: 02 The podcasts I listen to

Released on 2014-05-28 under a CC-BY-SA license.

I listen to a lot of podcasts. I started listening to them back in around 2005 after buying my first portable player.

This is a continuation of the 85 podcast feeds I subscribe to. In my last show I reported on the first 41 of the set. Here are the remaining 44 feeds.

Note: The list below is generated by a script which performs a query on my database. I have relied on parsing the feeds themselves for the websites, using the link value. In a few cases the value is unfortunately incorrect or missing because the feed is mis-configured.

I have included an OPML version of the list in case you want to load it or part of it into your podcatcher. Find it at

  1. Amateur Skeptics

  2. Geeks Without God

  3. InKredulous

  4. Rationally Speaking

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-04-06
    • Description: Rationally Speaking is the bi-weekly podcast of New York City Skeptics. Join hosts Massimo Pigliucci and Julia Galef as they explore the borderlands between reason and nonsense, likely from unlikely, and science from pseudoscience. Any topic is fair game as long as we can bring reason to bear upon it, with both a skeptical eye and a good dose of humor! We agree with the Marquis de Condorcet, who said that in an open society we ought to devote ourselves to "the tracking down of prejudices in the hiding places where priests, the schools, the government, and all long-established institutions had gathered and protected them." Rationally Speaking is produced by Benny Pollak and is recorded in the heart of New York City's Greenwich Village.
    • Category: Skepticism
  5. Skepticality:The Official Podcast of Skeptic Magazine

  6. Skeptics with a K

  7. Skepticule

  8. The Pod Delusion

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-04-04
    • Description: The Pod Delusion is a weekly news magazine podcast about interesting things. From politics, to science to culture and philosophy, it's commentary from a secular, rationalist, skeptical, somewhat lefty-liberal, sort of perspective.
    • Category: Skepticism
  9. The Pod Delusion » Pod Delusion Extra

  10. The Skeptics' Guide to the Universe

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-04-10
    • Description: The Skeptics' Guide to the Universe is a weekly Podcast talkshow discussing the latest news and topics from the world of the paranormal, fringe science, and controversial claims from a scientific point of view. -The Skeptics' Guide to the Universe: Your escape to reality -Produced by the New England Skeptical Society in association with the James Randi Educational Foundation(JREF) :
    • Category: Skepticism
  11. The Skeptic Zone

  12. 2600 - 2600: The Hackers Quarterly

  13. bsdtalk

  14. /dev/random Cast

    • Website:
    • Feed:
    • Format: Atom
    • Last episode: 2014-01-24
    • Description: /dev/random is a show created by a bunch of random people, at a random time, on random topics that MAY be of interest ... to someone. The show is available here and WAS also available via the AWESOME Hacker Public Radio (HPR) ( ) until they wised up.
    • Category: Technical
  15. FLOSS Weekly (MP3)

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-04-09
    • Description: We're not talking dentistry here; FLOSS all about Free Libre Open Source Software. Join host Randal Schwartz every Wednesday as he talks with the most interesting and important people in the Open Source and Free Software community. Records live at every Wednesday at 8:30am PT/11:30am ET.
    • Category: Technical
  16. Free as in Freedom

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2013-10-17
    • Description: A bi-weekly discussion of legal, policy, and other issues in the open source and software freedom community (including occasional interviews) from Brooklyn, New York, USA. Presented by Karen Sandler and Bradley M. Kuhn.
    • Category: Technical
  17. Frostcast OGG

  18. Full Circle Magazine » podcast

  19. GNU World Order

  20. Hacker Public Radio

  21. KernelPanic Oggcast

  22. Audio Feed.

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-02-09
    • Description: The cross platform podcast that makes technology work for you and not the other way around. The place to go for all geeks who slide between Mac, iOS, Android, Linux and Windows offering an essential mix of hacks, tips, howto's and tweaks spiced up with a dash of geek culture. Also check out our Mediafeed that has both our audio and video episodes.
    • Category: Technical
  23. Linux Basement Podcast

  24. Linux In Da House Ogg-Vorbis Feed

  25. Linux Luddites » Ogg

  26. LinuxLUGcast – Ogg

  27. Linux News Log (ogg)

  28. Linux Outlaws

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-04-13
    • Description: Two pragmatic geeks talk about the latest news concerning Linux, free and open technology or anything else they deem noteworthy which may include such absurd things as hockey or bands you never heard of. This means there's many a joke and derailed conversation along the way, so don't come here expecting only Linux or software freedom talk — just sit back and relax, partner.
    • Category: Technical
  29. Linux Voice Podcast

  30. mintCast » OGG

  31. Network Security Podcast

  32. Security Now (MP3)

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-04-08
    • Description: Steve Gibson, the man who coined the term spyware and created the first anti-spyware program, creator of Spinrite and ShieldsUP, discusses the hot topics in security today with Leo Laporte. Winner of the 2009 and 2007 people's choice award for best Technology/Science podcast. Records live at every Tuesday at 1:00pm PT/4:00pm ET.
    • Category: Technical
  33. SourceTrunk

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-04-07
    • Description: Sourcetunk will try to demystify the beautiful beast that is Open Source and show the listeners the more practical examples of Open Source and Free Software. It will discuss software for Linux, BSD, MacOSX and Microsoft Windows systems
    • Category: Technical
  34. Sunday Morning Linux Review – OGG Feed

  35. The Command Line Podcast

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-01-26
    • Description: A regularly published podcast by a self-described hacker, curmudgeon and hacktivist about the practice and profession of programming drawing on over a decade of professional experience and a lifetime spent hacking, the intersection of politics and society with technology and anything else clever, elegant or funny that catches my mind as a die hard technology geek.
    • Category: Technical
  36. The Linux Link Tech Show Ogg-Vorbis Feed

  37. The Mind Tech Podcast

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-02-26
    • Description: The Mind Tech Podcast is your weekly dose of tech, privacy, security and conspiracy. Each week we’ll talk about the very latest tech news and the continued threats to internet freedom.
    • Category: Technical
  38. The Techie Geek Podcast

  39. The Podcast

  40. This Week in Tech (MP3)

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-04-13
    • Description: Your first podcast of the week is the last word in tech. Join Leo Laporte, Patrick Norton, Kevin Rose, John C. Dvorak, and other tech luminaries in a roundtable discussion of the latest trends in digital technology. Winner of the 2005 People's Choice Podcast Award for best overall podcast and Best Technology Podcast. Released every Sunday by midnight Pacific.
    • Category: Technical
  41. TuxRadar Linux Podcast (mp3)

  42. Ubuntu Podcast » MP3

  43. Unseen Studio » Crivins (OGG)

  44. Unseen Studio » TuxJam (OGG)

hpr1516 :: 01 The podcasts I listen to

Released on 2014-05-26 under a CC-BY-SA license.

I listen to a lot of podcasts. I started listening to them back in around 2005 after buying my first portable player.

I now listen to podcasts to the exclusion of just about everything else and have several players which I rotate between. I gave up watching TV over two years ago. I have written my own podcatcher software based upon Bashpodder, with a PostgreSQL database to manage everything, which holds feed, episode, playlist and player details.

My interests range from Astronomy to Virology with a bias towards IT-related subjects. I currently subscribe to 85 feeds, which I present to you here in two batches. I have attached my own category to each feed, so I can load all the Science episodes on one player, and Documentary episodes on another, and so forth. I have added the category to the list as well and have sorted the list by category and the title.

Note: The list below is generated by a script which performs a query on my database. I have relied on parsing the feeds themselves for the websites, using the link value. In a few cases the value is unfortunately incorrect or missing because the feed is mis-configured.

I have included an OPML version of the list in case you want to load it or part of it into your podcatcher. Find it at

  1. Friday Night Comedy from BBC Radio 4

  2. Geologic Podcast

  3. Documentary of the Week

  4. In Our Time With Melvyn Bragg

  5. Lives in a Landscape

  6. The Radio 3 Documentary

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-04
    • Description: In-depth documentaries which each week explore a different aspect of history, science, philosophy, film, visual arts and literature. The Sunday Feature is broadcast every Sunday at 7.45pm on BBC Radio 3. Each episode lasts 45 minutes. We aim to include as many episodes of The Sunday Feature in the podcast as we can but you'll find that some aren't included for rights reasons.
    • Category: Documentary
  7. Costing the Earth

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-13
    • Description: Man's effect on the environment, questioning accepted truths, challenging those in charge and reporting on progress towards improving the world. Presenters, Tom Heap and Dr Alice Roberts, travel the UK and the world in search of solutions to the challenges facing the natural world and the people and wildlife that live in it. Broadcast at 21.00 on Mondays, Costing the Earth runs for 27 weeks of the year, split into three series. Podcast episodes are added weekly.
    • Category: Environment
  8. Mark Kermode and Simon Mayo's Film Reviews

  9. The Film Programme

  10. Escape Pod

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-12
    • Description: The Science Fiction Podcast Magazine. Each week Escape Pod delivers science fiction short stories from today's best authors. Listen today, and hear the new sound of science fiction!
    • Category: Literature
  11. PodCastle


    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-14
    • Description: is designed to provide a Chart for Creative Commons Music, in a way that is easily able to be integrated into other music shows that play Creative Commons Music. has a daily exposure podcast, playing one new track every day, a weekly podcast, playing the last week of tracks played on the podcast, plus the top rated three tracks from the previous week. There is also a monthly podcast which features the top rated tracks over the whole system.
    • Category: Music
  13. Best of Natural History Radio

  14. Coast and Country

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-08
    • Description: Countryside magazine featuring people, walks and wildlife from rural Britain. Clare Balding’s ‘Ramblings’ and ‘Open Country’ with Matt Baker and Helen Mark join forces to bring you a weekly tour of the best of the British countryside. In ‘Ramblings’ Clare joins her guests on a country walk that’s been significant in their lives. ‘Open Country’ travels to a different corner of the British Isles every week, seeking out the wildlife, the landscapes and the controversies that excite the passions of local people. Each twenty-five minute programme is broadcast on Saturday at 6.07am and repeated on Thursday at 3pm. New episodes are added every Saturday morning.
    • Category: Nature
  15. From Our Own Correspondent

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-10
    • Description: Insight, wit and analysis as BBC correspondents, journalists and writers take a closer look at the stories behind the headlines. Presented by Kate Adie. Broadcast on BBC Radio 4 in the UK on Thursdays at 1100 (local time) and Saturdays at 1130 (local time) for about 25 weeks of the year. BBC World Service broadcasts every day from Monday to Friday plus a weekend edition all year round, presented by Pascale Harter. For more information, a full list of programme broadcast times and the podcast Terms of Use go to
    • Category: News
  16. Peter Day's World of Business

  17. A Point of View

  18. Moral Maze

  19. Thinking Allowed

  20. 365 Days of Astronomy

  21. Astronomy Cast


    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-01
    • Description: Awesome Astronomy is the show for anyone and everyone who has even the slightest interest in astronomy and science. Join Ralph & Paul at the beginning of each month, for an informative and fun astronomy program exploring the mysteries and wonders of the universe. You can be guaranteed a passion for astronomy, simple explanations of complex and fundamental topics, space and science news, absorbing interviews and answers to listeners' astronomy questions. As both presenters have been accused of being a little skeptical in the past, you can also expect everything to be fact-based but frivolous, with an emphasis on highlighting the wonderful science that reveals ever more about our complex and exciting universe. Join us on our journey to understand it all!
    • Category: Science
  23. BBC Inside Science

  24. Click

  25. Discovery

  26. Dr Karl and the Naked Scientist

  27. Inside Health

  28. Naked Astronomy - From the Naked Scientists

  29. Naked Genetics - Taking a look inside your genes

  30. Naked Neuroscience - From the Naked Scientists

  31. Naked Oceans from the Naked Scientists

  32. Science for the People

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-09
    • Description: Science for the People is a syndicated radio show and podcast based in Edmonton, Alberta, that broadcasts weekly across North America. We explore the connections between science, popular culture, history, and public policy, to help listeners understand the evidence and arguments behind what's in the news and on the shelves.
    • Category: Science
  33. Science in Action

  34. The Digital Human

  35. The Infinite Monkey Cage

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-03-10
    • Description: Award winning science/comedy chat with Brian Cox, Robin Ince and guests. Witty, irreverent look at the world according to science with physicist Brian Cox and comedian Robin Ince. New Series starting on BBC Radio 4, Monday 18th November at 4.30pm (repeated on Tuesday evenings at 11pm) for 6 weeks.
    • Category: Science
  36. The Life Scientific

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-04-08
    • Description: Each week, Jim al-Khalili invites a leading scientist to tell us about their life and work. He'll talk to Nobel laureates as well as the next generation of beautiful minds to find out what inspires and motivates them and what their discoveries might do for us.
    • Category: Science
  37. - The Naked Scientists Podcast - Stripping Down Science

  38. This Week in Microbiology with Vincent Racaniello

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-01
    • Description: This Week in Microbiology (TWiM). A podcast about unseen life on Earth hosted by Vincent Racaniello and friends. Following in the path of his successful shows 'This Week in Virology' (TWiV) and 'This Week in Parasitism' (TWiP), Racaniello and guests produce an informal yet informative conversation about microbes which is accessible to everyone, no matter what their science background. As a science Professor at Columbia University, Racaniello has spent his academic career directing a research laboratory focused on viruses. His enthusiasm for teaching inspired him to reach beyond the classroom using new media. TWiM is for everyone who wants to learn about the science of microbiology in a casual way. While there are no exams or pop quizzes, TWiM does encourage interaction with the audience via comments on specific episodes, email and Skype. Listeners can also use to suggest topics for the show by submitting articles, papers, video and images to the site and tagging them with "TWiM". Each week Racaniello will view the tagged content and select items for discussion. For questions and/or feedback please email
    • Category: Science
  39. This Week in Parasitism

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-10
    • Description: TWiP is a monthly netcast about eukaryotic parasites. Vincent Racaniello and Dickson Despommier, science Professors from Columbia University, deconstruct parasites, how they cause illness, and how you can prevent infections.
    • Category: Science
  40. This Week in Virology with Vincent Racaniello

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-11
    • Description: This Week in Virology is a netcast about viruses - the kind that make you sick. Professors Vincent Racaniello, Dickson Despommier, Rich Condit and science writer Alan Dove and guests deconstruct viruses, how they cause illness, and how you can prevent infections.
    • Category: Science
  41. Doctor Who: Radio Free Skaro

    • Website:
    • Feed:
    • Format: RSS 2.0
    • Last episode: 2014-05-11
    • Description: Radio Free Skaro is possibly the most popular, most prolific and charmingly irreverent (but never irrelevant) Doctor Who podcast around. All previous episodes are available on the iTunes feed, as well as the Radio Free Skaro homepage - Enjoy!
    • Category: Sci-fi

hpr1473 :: FOSDEM Discussion

Released on 2014-03-26 under a CC-BY-SA license.

I decided to attend FOSDEM 2014 this year. I had thought about going to last year's conference but didn't get organised enough to make it. When I mentioned my plans to my friend Tom, he thought he'd attend too, and we agreed to meet up there.

When we got back from the conference I wanted to record a conversation with Tom about our impressions of the event. We tried to do this four times before we finally managed it. We struggled through one recorder battery failure and two Mumble failures before we achieved success. This is the result of our conversation.

Apologies for the phone interference in the background, I hadn't realised the recorder (a Tascam DR-07) would pick them up.


hpr1461 :: FOSDEM Keysigning Event

Released on 2014-03-10 under a CC-BY-SA license.

I attended FOSDEM 2014 in Brussels, Belgium. During the conference there was a key signing event which I attended. These are my impressions of the process and the follow-up.

Detailed notes:

hpr1362 :: Fixing a bad RSS feed

Released on 2013-10-22 under a CC-BY-SA license.

There have been problems with the podcast feed for "mintCast", apparently as a result of a bug in Wordpress. The feed contains multiple "enclosure" tags containing the same audio over and over again. While the mintCast hosts are looking for a fix I would like to find a local work-around.

I have also encountered a problem with the "Pod Delusion Extra" feed which contains multiple enclosures in some episodes. Unlike the "mintCast" example I don't want to lose these enclosures but want to find a way of repackaging them into individual episodes.

These problems affect some podcatchers, the modified Bashpodder I use being amongst them. To counteract this problem I have written two short Perl scripts to copy and clean each feed before submitting it to my podcatcher.

Detailed notes:

hpr1303 :: A Music Pairing Under Unlikely Circumstances

Released on 2013-07-31 under a CC-BY-SA license.

Today Dave interviews Tim, his son, and Tim's friend John, who is visiting from the USA.

Tim and John met on the Internet in 2006 as collaborating composers of electronic music. They have become good friends over the years; Tim has visited John in the States, in 2011 where they met for the first time in real life, for John's wedding. This also marks the first time that John and his wife Caitlin have travelled overseas, which they did to visit Tim in the UK.

In the podcast we discuss how they met, how their different world views affected each other, and how their relationship quickly transcended music.

Here's a picture of Tim and John visiting Edinburgh Castle in July 2013:

Tim and John visiting Edinburgh Castle in July

Contrary to what was said in the podcast, Tim prepared a mix of the various compositions he and John have made. Links to some of the full tracks are available below.

Here are Tim's notes for the music mix:


Some of Tim and John's work -
Their latest collaboration -

hpr1291 :: Parsing an ISO8601 formatted duration field with Perl

Released on 2013-07-15 under a CC-BY-SA license.

Ken recently asked Dave for help with a Perl regular expression for parsing ISO8601 time durations. As a consequence a Perl script was written, which is available at

In this show Ken and Dave discuss this script at some (considerable) length. Keen listeners might want to view the script as they listen. Detailed show notes describing how to put together a Perl regular expression are also available at URL.

Unfortunately some of the line numbers in the script referred to in the show are now incorrect since Dave could not stop himself updating it.

For detailed show notes on how Dave created the script see:

hpr1286 :: iCalendar Hacking

Released on 2013-07-08 under a CC-BY-SA license.

Having failed to make repeating reminders in his calendar for the HPR Community News shows on the Saturday before the first Monday of every month, Dave resorts to writing raw iCalendar rules. This also proves to be quite difficult and a Perl script is resorted to, also with mixed success.

hpr1204 :: My Magnatune Downloader

Released on 2013-03-14 under a CC-BY-SA license.

The Problem

I'm a fan of Magnatune ( and have been buying music from them for 7 or 8 years. The Magnatune website itself is good for exploring and downloading, and interfaces for browsing and purchasing are available in a number of players on Linux. I have direct experience of:

  • Amarok: allows you to browse, purchase, examine artist information and album details.
  • Rhythmbox: the plugin, which used to allow browsing and purchasing, is currently unavailable, but is apparently due to return soon.
  • Gnome Music Player Client: (a front-end to the Music Player Daemon, mpd) offers a Magnatune browser plugin
  • Magnatune Web 2.0 player: a web-based tool which will browse, play and download Magnatune music.
  • Magnatune Android player: a fairly basic browser and player for Android 2.0 and up.

The Magnatune Web 2.0 player is the best of the bunch as far as I am concerned, particularly since it allows me to explore the music collection whilst listening to streamed music at the same time. However, none of these interfaces provide me with exactly what I want in terms of the download process, so I decided to write my own.

The Plan

I currently host my music on my HP Proliant microserver, share it across the home network, and play it with the Music Player Daemon ( on my desktop system. I normally keep the album cover image, artwork and related material in the same directory as the album itself, and I want to be able to save all files in their appropriate places automatically.

Magnatune provides an API which is documented at, though this information is only available to members. Data is available in several formats: XML, SQlite and MySQL.


I didn't want to launch into building a full-blown application, especially since I only needed a downloader, so I decided to create a collection of Bash and Perl scripts.

I decided to use the XML data organised by album. This is updated on about a weekly or two weekly basis, and there is a signalling mechanism through a downloadable file containing a checksum. When this changes the large data file has changed and can be downloaded. At the time of writing I simply run this by hand when I receive an email alert from Magnatune.

Magnatune uses an unique key made from the artist and album names which it refers to as the SKU (Stock Keeping Unit) or albumsku. They use this as an URL component and in XML tags. I use it to identify the stuff I download and to keep a simple inventory.

I decided to write some basic scripts:

  • To download the catalogue

  • To extract information from the catalogue

  • To download an album

  • To unpack the downloaded items into the target directory

I wanted to learn more about manipulating XML data, so I decided to use XSL, the Extensible Stylesheet Language. This lets you define stylsheets for XML data, including ways of identifying XML components with XPath and of transforming XML with XSLT.

I have included a number of links to the resources I used in the shownotes.


I have placed all of the scripts, their associated files, and HTML and PDF README files (extended shownotes) in a gitorious repository. This can be browsed at or, if a copy is required it can be obtained with the command:

  git clone

This makes a local git repository containing a copy of all of the files in the current directory.


  • update_albums: a Bash script to download a new version of the album catalogue, as a bzipped XML file, if it is different from the current version. It generates a summary of the catalogue for simple searching using XSLT.

  • report_albumsku: a Bash script to take a SKU code and look up the album details in the XML file.

  • get_album: a Bash script to download an album, cover images and artwork. It takes the SKU as an argument and uses it to make an URL for an XML file which points at all of the components, and this is downloaded (with authentication). The script then parses this file to get the necessary URLs for downloading. I only use the OGG format but it could easily collect any or all formats available from Magnatune. The script records the fact that this particular SKU code has been downloaded so that it isn't collected again in error. All downloaded files are given names beginning with the SKU code and are stored for the installation phase.

  • install_download: a Perl script which unpacks the downloaded zip file to its final destination then adds the cover images and artwork to the same place. I used Perl because it allowed me to query the zip file to determine the name of the directory that was going to be created.

Further Developments

I have added further scripts to this system since I created it. I have one that synchronises the music files from my workstation to the server, and two that give me a simple wish-list or queue functionality.

Since I have a 200GB download limit per month on my broadband contract I try not to download music too often and avoid contention with the rest of the family. My queueing system is used to keep a list of stuff I'd like to buy from Magnatune, and I simply feed the top element from the queue into my download script every week or so.

In the future I expect to be refining all of these scripts and making them less vulnerable to errors. For example, I have found a few cases where Magnatune's XML is not valid and this causes the xsltproc tool to fail. I'd like to be able to recover from such errors more elegantly than I'm doing now.

At some point I may well be tempted to consolidate all of the current functions into a single Perl script.


I have no connections to Magnatune other than being a contented customer.


hpr1148 :: Development Discussion

Released on 2012-12-26 under a CC-BY-SA license.

I am trying to write a script which will implement the scheduling rules for HPR. I spoke to Ken Fallon about this, and where it would fit in the overall design of the HPR system, when we met up at OggCamp 2012 in August, but we didn't manage to resolve very much. So, recently Ken and I began a discussion over Mumble to try and make progress. A few minutes in we decided to record our discussion for posterity, and this is the result.

The notes which I had sent Ken before our Mumble session are available in PDF format.

hpr1091 :: Useful Vim Plugins

Released on 2012-10-07 under a CC-BY-SA license.

Useful Vim Plugins

I started learning vi a long time ago when I first encountered Unix systems. In those days you could usually count on a system having vi (or at a pinch, when the system would only boot into single user mode, ed). Learning Emacs didn't seem like a good choice since it wasn't usually available on the systems I was administering.

I don't remember when I changed to Vim, but for many years I have used it (actually gVim) as an IDE (Integrated Development Environment), particularly for writing Bash and Perl scripts.

In these notes I have listed some of the plugins I use to enhance Vim and gVim's functionality. If you have never made enhancements to this editor, here's a site with a very good tutorial on how to install plugins


This plugin provides a file browser within Vim/gVim. A particular directory is opened by typing :NERDTree somedir. A tree is displayed in a window which can be scrolled and traversed to find files to edit.

In case you're interested, the colour theme I use in gVim is "Murphy".

Type :h NERD_tree for the large and comprehensive help file.

I prefer to use NERDTree in gVim and not in Vim. To achieve this I have the following in my ~/.vimrc

  " NERDTree settings (only in GUI mode)
  if has("gui_running")
      let NERDTreeRoot = '~'
      let NERDTreeIgnore = ['\~$', '\.swp$']
      let NERDTreeShowHidden = 1
      let NERDTreeShowBookmarks = 1
      let NERDTreeChDirMode = 2
      let loaded_nerd_tree = 1


This one provides a Bash scripting IDE for Vim and gVim. I find it most usable in gVim where it offers a comprehensive set of menus which you can see in the example.

From the Help text:

  It is written to considerably speed up writing code in a consistent style.
  This is done by inserting complete statements, comments, idioms, and code
  snippets. Syntax checking, running a script, starting a debugger can be done
  with a keystroke. There are many additional hints and options which can
  improve speed and comfort when writing shell scripts.

The plugin can be used from the menu or by typing short-cut sequences such as \ct which inserts the current date and time at the cursor position. It's an amazingly detailed package that's well worth dedicating the time to learn if you often write Bash scripts.


This plugin provides a Perl scripting IDE for Vim and gVim. As with the Bash plugin from the same author I find it most useful from gVim where the menus can be used to perform a wide range of actions.

Again, you can use it to insert statements, boilerplate text and comments, in a similar way to the Bash plugin. You can also get regular expression help, check, run and debug the script

Two of the functions I find particularly useful are perltidy and perlcritic. Perltidy will reformat your Perl script, and Perlcritic will critique it according to the rules based on Damian Conway's book Perl Best Practices.

Note the lower window showing the various problems detected by perlcritic.

If you are a C or C++ programmer Fritz Mehner also provides a plugin for these languages here.


This is a man page viewer for use within Vim. Use :Man topic or press K on a keyword. Can view perl, php and python help.

This is a great way to view man pages, with the ability to search and cut and paste the contents.


The plugin provides mappings to easily delete, change and add "surroundings" such as quotes, braces and parentheses.

The following extract from the Help text should make this clearer:

  Consider the following examples.  An asterisk (*) is used to denote the cursor
    Old text                  Command     New text
    "Hello *world!"           ds"         Hello world!
    [123+4*56]/2              cs])        (123+456)/2
    "Look ma, I'm *HTML!"     cs"<q>      <q>Look ma, I'm HTML!</q>
    if *x>3 {                 ysW(        if ( x>3 ) {
    my $str = *whee!;         vlllls'     my $str = 'whee!';


A very powerful interface to git.

The image shows the result of the :Gstatus command which is equivalent to typing git status on the command line.


This plugin provides source code browsing by listing tags (functions, classes, structures, variables, etc.). The list is in a window in Vim or in a menu in gVim.

The plugin makes us of the Exuberant Ctags utility to index tags in a source file. I believe that most Linux distributions ship with this utility, but if not it seems to be easily available in repositories.

The image shows gVim with the tag list in a window. I find the menu in gVim more useful myself.


Provides insert completion functionality using the Tab key.

The example shows a Perl script where the choice being made from the list offered by Supertab is uptodate. Note also that manpageview is being used to view the manpage for the CPAN module.

It has taken me a while to learn not to use the Tab key to enter TAB characters but to use CTRL-Tab instead. However, I have decided that the advantages of redefining the Tab key in this way outweigh the disadvantages. You might not agree!

Become a Correspondent