Making life easy over flaky links

Making life easy over flaky links

I tend to work over VPN, which we know can be flaky at times, Since I work on server, I spend a lot of time ssh’ed into hosts. I was getting tired of the lost time having to restart what I was working on every time the VPN dropped (which could be as much as every 15 minutes on a bad day). While I already used screen to handle the lack of terminals (Alas, I am forced to use a Windows laptop to VPN in with), I thought there could be an easier way to do this.

The way I tend to work is that I ssh into a jump server, fire up screen, then ssh into the hosts I need to work on, and fire up screen on those hosts.

Now, this is nice, but it can get a bit tiring to do it all over
again. So, I found a tool called
autossh which will automatically restart your ssh session if it drops for any reason but a graceful disconnect. (Well, there are others, but this is basically it). Combine this with your ssh-agent, and you can re-attach with easy. I also use keychain to help manage my ssh-agent when I log in.

Now that the connection will come back, I need a way to re-attach to my screen session, or if there is not one, to start one for me. To do
that, I have this is my .bashrc file:

test -x $STY && screen -xR

This will check to make sure that we are not already inside a screen session on the local host (test -x $STY), and if we are not, then either attach to an existing screen session or start a new one (screen -xR)

I have define this function in my .bashrc to spawn a new ssh connection in a separate screen window:

function ss ()
{ screen -t $1 ssh $*

Easy stuff

Search your email!

Search your email!

One of the features that most of the pretty GUI mailers offer you is the ability to search your email. While this is not a feature I use regularly, it is one which when you need it, you really need it. I have used grepmail in the past, but it slow for me (it scans the mail files every time) and the big thing for me is that is only supports mbox files, and I use maildir since I use offlineimap.

I recently found mairix. While I have not been using it long, so far I am very impressed with it. It uses an index to speed up the search process, and it smartly adds only new or changed files to the index. The first indexing run was only a few seconds on my archive of almost 15,000 mail messages. I have it scheduled to update the index every 15 minutes, and I never notice the load this will put on the system.

To integrated mairix with mutt, I wrote a quick little script to search from within (or without) mutt:

# USAGE: ./
# DESCRIPTION: search mail stuff
# OPTIONS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Don Harper
# COMPANY: Don Harper
# VERSION: 1.0
# CREATED: 05/25/2009 07:03:30 PM CST
rm -rf $HOME/Maildir/mfolder
echo " t::word Match word in the To: header.
 c::word Match word in the Cc: header.
 f::word Match word in the From: header.
 s::word Match word in the Subject: header.
 m::word Match word in the Message-ID: header.
 b::word Match word in the message body.
 d::[start-datespec]--[end-datespec] Match messages with Date: headers lying in the specific range.
 z::[low-size]--[high-size] Match messages whose size lies in the specified range.
 n::word Match word occurring as the name of an attachment in the message. Since attachment names are usually long, this option F::flags Match messages with particular flag settings. s meaning seen, r meaning replied f meaning flags prefixed by a - to negate its sense. The a:: search pattern is an abbreviation for tcf: Match words The word argument to the search strings can take various forms.
 ~word Match messages not containing the word. 
  word1,word2 This matches if both the words are matched in the specified message part.
  word1/word2 This matches if either of the words are matched in the specified message part.
 substring= Match any word containing substring as a substring
 substring=N Match any word containing substring, allowing up to N errors in the match.
   For example, if N is 1, a single error is allowed, where an error can be * a missing letter * an extra letter * a different letter.
 ^substring= Match any word containing substring as a substring, with the requirement that substring occurs at the beginning of the matched word.
 d::start-end Specify both start and end explicitly "
echo -n "Enter your search string: "
read string
mairix $string
mutt -f=mfolder
rm -rf $HOME/Maildir/mfolder

Then, I bound this to “S’’ from within mutt:

 macro index,pager S "!mailsearch\n" 

This will give me a reminder of the search command, run the search, and then give me the search results in a new mutt session.

wifiroamd, Intel PRO/Wireless 3945ABG, and Fedora

wifiroamd, Intel PRO/Wireless 3945ABG, and Fedora

One of the things that has annoyed me about Fedora has been the decision to switch over to using NetworkManager to manage all network connections.

Now, on the service this has a lot of advantages. A lot of work has gone into it, and it just works for a vast majority of the installations out there. They have made it so the move from wired to wireless and back can be done without the user doing anything. They have also seamlessly tied in Dial-Up Networking if you still need a modem or use a wireless modem. They even have two-click access to your VPN which is pretty cool.

All these are things which are very good for Linux users. The biggest drawback to all this? The need for a user-space program to manage the non-hardwired connections. Which means that in order to be able to have any network running besides the good old twisted-pair copper, you have to have a little applet running as you, and it has to have a systray somewhere to display. Which means you have to be a) logged into the system and b) you have to be running a window manager which supports having a system tray. Now, Fedora gives you lots of choices for the second part now days. You have Gnome, KDE, XFCE, and LXDE. All are perfectly usable window managers. But, they still require you to be logged in to X. And, I do not use any of them.

So, what is a cli-loving Fedora user to do? Well, there is this great program called wifiroamd. It will handle the same basic tasks that NetworkManager handles. It will automatically configure your wifi interface and connect to the wifi networks or the locate hardwired NIC if it cannot. You can configure it to run scripts per connection, so for example, you can change your firewall rules for different networks (shields down at home or the office, but up full at the coffee house), or you could bring up your VPN connection when you start using a given wireless network.

One tip I picked up from the author was that if you have multiple AP’s in range, an you want to select once AP over the other, is under the /etc/wifiroamd/connections directory, simply link the AP info you do not want to the one you want:

ln essid:my_home_ap essid:bad_ap

where essid:my_home_ap is your AP with the keys and other information you want, and essid:bad_ap is the one you do not want to connect to. My neighbors have some very powerful AP’s which have a habit of showing up high than mine, but I have no problem with them now.

I have been using this set up under Fedora since FC6 days, but when I upgraded to F10, this stopped working. wifiroamd would try to scan for an AP, and not find anything. The change, it turns out, is that when I switched from using the iw3945 driver to the native iwl3945, wifiroamd could no longer see the wireless NIC due to the wpa_supplicant process, but NetworkManager could. Simply stopping and disabling wp_supplicant and NetworkManager, and wifiroamd started working again! I am a happy camper again.

C*MUS – A music manager for the terminal

C*MUS – A music manager for the terminal

C*mus is an advanced music juke-box for *inx and Window operating systems. It can handle the modern audio file formats: FLAC, Ogg/Vorbis, MP3 , Wav, AAC , MP4, .mod, .s3m, .mpc, mpp, .mp+, .wma, and .wv . It also can deal with many different types of audio output systems: ALSA, libao, ARTS, OSS, Sun, and WaveOut on Windows. The typical features of an electronic juke-box are supported like play lists and random/shuffle play, in addition to easily switching between playing from the library, an artist, or a single album with a simple keystroke.

C*Mus is pretty painless to install from source. The website lists the build dependencies with links.


One of the features I really enjoy and use is the en-queue function. I tend to use this two ways. The first is when I am listening to a song, and want to listen to similar songs, I go find them in my library, and I queue them up with a simple keystroke. A dynamic play-list, if you will. Then, I can simply create a more permanent playlist from this temporary list.

The second way is using the helper program cmus-remote to be able to queue up tracks from a different terminal, or from a script. My podcatcher program (bashpodder) will queue up the podcasts it just downloaded for me, so I can listen to them first thing in the morning.

Keystroke and CLI

CMus is developed to be driven via keystrokes. The default mapping is set up to be comfortable for those use are familiar with VI but, it is very easy to remap the keys to make it more comfortable. CMus will automatically save the current settings on a clean exit. The default mappings for selecting and updating views, moving through songs forward and backwards in small and large increments, adding to play list and queue lists.


One of the very powerful features is simple filters. You can set a filter for your 80’s Metal Bands or your Classical music. Many of the common tags can be used for filter on. Things like filename, artist, album, title, genre, discnumber, tracknumber, date (year), duration (seconds), and tag.

Google’s Calendar on the Command Line!

Google’s Calendar on the Command Line!

You love your comfortable command line, but all the cool kids are playing in the Web 2.0 web space, and you want to stay true to your roots?  Want a Web 2.0 calendar, but still love (or need) command line access?

I just found the answer: gcalcli. This little tool will let you list your appointments, get an list your events, get an agenda, print ascii rendering of your calendar for the week or month.  You can even add events to the calendar.

I like the fact that I can easly get at my gcalendar from anywhere (even my cell phone), and now I can do it from my shell.

The only downsides so far?  The code has not been updated since October of 2007, and the speed can be a little slow sometimes. I am going to play with it for a while to see if I like it enough to replace remind.

Alerting with Remind

Alerting with Remind

Back in my article on Remind, I talked about the simple power of remind to power your scheduling needs.  That is all fine and good, but how to you get it to tell you when you have an event?

In its simplest form, when you run _remind _ from the command line, it will not only display the current day’s reminders, but it will run in the background and wake up to tell you about other reminders on the screen while you work.

This is fine, but what happens if you do not have that termial open in front of you?  Well, I have two ways I approach that issue.

First, when I run under X (yeah, yeah, I know, but I use cli tools under X), I have this added to my .xinitrc:

remind -z -k’xmessage -buttons okay:0 -default okay %s&’ ~/.reminders &

Let’s look at the command line:

  • The -z tells remind to wake up every 5 minutes and reread the .reminders file.
  • The -k tells remind to run a command instead of simply printing the reminder to the screen
  • xmessage -buttons okay:0 -default okay %s& is the secret sauce of this.  This is the command run when there is an alarm.  This command line calls xmessage (which is on pretty much any box with X) to display the alert.  You could use zenity or kmessage, or winpopup, or whatever.  This is what puts the alert in your face when you are not looking at the screen.  The & is needed to make this command non-blocking by putting it in the background.

That all good if you are setting at your computer.  But, what do you do when gasp you leave to computer?  This is a little tricker.  For this, my solution needs two things: 1) a computer which is always on and 2) a way to send messages to your cell phone/pager (sms or email).  I have a cron job which checks to make sure remind is running, and restarts it if it is not (I use a hosting provider which does not like long running processes).  The command line is similar to the one for X, but with a difference:

TZ=CDT6CST ~/bin/remind -z -k”echo %s

Pizza Party – Command Line Pizza ordering program

Want a pizza, and do not want to fire up that pesky GUI?  We have the solution for you: Pizza Party – Command Line Pizza ordering program

Currently, only from Dominos, so if you do not have one near you who accepts on-line orders (sigh, mine does not), then you are out of luck.


Update 2018-02-26 : Seems the domain has changed, and I am not sure where this moved to.

So you need a calendar?

So you need a calendar?

So, one of the things we have been using computers for is to keep track of our lives.  And this means a scheduling or calendaring tool.  Some tools out there do this fine, and some do it very well.

I have to keep track of a lot of appointments. From conference calls for work, to each member of the family’s schedules, to random, but highly important reminders.  Most calendaring programs out there will let you set up a reoccurring event by day of the month, or the date.  But, what if you need to do something two days before the end of the month, every month?  Or, you need to do something every full moon, but not on the blue moon?  Or, you have a standing meeting with your boss every other Monday morning, execpt when Monday is a holiday, then the meeting shifts to Tuesday?  Oh, and you want something that you can run over an ssh session, while on your smart phone, or you friend’s smart phone?

The answer is simple: remind.  remind can do this, and more.  Need to set something up by the Hebrew Calendar?  Check.  Want your calendar to run a shell command for you on a holiday, specific day of the month, or phase of the moon? Check.

Most modern Linux distrobutions include remind nowdays, as it is so darn usefull.  In addition, it runs just fine under Solaris, and the BSDs, including MacOS X.  If fact, over at 43Folders, they have a whole section their wiki for remind.  The wiki has many tips and tricks on how to use remind to its fullest.

In my next post, I will share some tips on how I get remind to remind me of events.

Command-Line blog posts

So, it only seems fitting that I should talk about a command-line interface to posting on this blog. No, I do not mean using links or the like, but a way to post from the command line.

So, this post is being typed up in vim on my Fedora 8 laptop. I will use this great little tool I found called wppost to post. wwpost is part of the perl module WordPress::Post.

A brief summary of its commands are bellow:

 -c category, can be a list separated by commas, no spaces
-t title
-i description, main body of post, if it has a slash, it is interpreted as a file to slurp
like a text or html file
-D iso formatted date for post, can be left out
-T if there are image attachments, place them as thumbnails only, with link, not just resized

Some usage examples taken from the man page:

 Most basic of usage, (provided you have a ~/.wppost file) wppost -t 'hi everyone' -i 'i just wanted to say hello' If you want to specify two different categories: wppost -t 'Another Apple' -i 'Apples are really great. I do love them so.' -c food,rant -D 20071231 If the body of the post is in a file wppost -t 'title here' -i ./content.txt If the content of the post is in a file and you want to use the file
name as the title wppost -i ./Title_Here.txt If you want to have file attachments: wppost -t 'recent photos' -i 'these are recent pictures i took' ./*jpg

Pretty cool, huh?

Peace out!