Category Archives: How-to’s

Tutorials and step-by-step instructions.

Receiving RSS Updates Via Email

Rss_Shiny_Icon.svg

If you’re like me, you rely on your email for everything in your life.  My email delivers my latest Facebook notifications, Nagios warnings, text messages (thanks to Google Voice), and oh I guess email too.

I have push email notifications on my mobile devices, as do a lot of people.

Some websites offer RSS feeds of information which is important to you, but don’t offer an option to receive an email.

Yes, you could set this up for any RSS feed, but this quick guide will focus on setting up email notifications for Reddit comment responses and Reddit messages.

Another interesting application for this might be to receive emails when your favorite Podcasts are updated, or if you want to get an email when your favorite blog posts a new update.

Reddit is a very real-time social website, and having instant notifications of events on Reddit could be very useful, however since Reddit doesn’t even require an email address to register, they’re not offering the functionality.

 

What You’ll Need:

  • An RSS feed to subscribe to.
  • An email address to send the notifications to.
  • A Linux server which is always online, which you can create cron jobs on.

 

Let’s Begin
This is the only part of this guide which requires root access to the server.  We will be using RSS2Email, which is a free program available for Linux.  If you are using Ubuntu, it is right in the repositories for you.

If you do not have root access to your server, but you do have SSH access, it may still be possible to use this program if you compile it yourself.  You can get the source code here.

sudo apt-get install rss2email

 

Setting Up RSS2Email
The setup is mind-numbingly easy!  If your email address is you@example.com, and your RSS feed link is http://www.reddit.com/message/inbox/.rss?feed=123foo456bar789&user=MyAwesomeUsername, you could use this syntax to set up your feed.

r2e new you@example.com
r2e add http://www.reddit.com/message/inbox/.rss?feed=123foo456bar789\&user=MyAwesomeUsername
r2e run

Important: Reddit RSS feeds for your Inbox, etc, have an ampersand (&) before your username.  If you do not escape this ampersand by putting a slash in front of it (\&) your feed will not work!

On The First Run, you may receive a high volume of email.  In fact, it was enough to cause my sendmail server to exceed its rate limit and throw a ton of email to the deferred queue.  But, it did eventually all send.  A lot of the first emails will be old RSS data you have already seen before.  After that, on subsequent runs, you will only receive updates.

 

Where Can I Find My Reddit Inbox Feed Link?
If you login to Reddit, and go to Preferences, you’ll find an “RSS Feeds” on the top of the page.  The direct link is https://ssl.reddit.com/prefs/feeds/.

 

Using RSS2Email
You can very easily add and delete feeds from your R2E configuration.

Add new feeds the same way you added the first one:  r2e add http://www.feedwebsite.com/feed

Delete old feeds by running r2e list, then r2e delete # where # is the number corresponding to the feed you want to delete.

 

Scheduling RSS2Email
Obviously, you will only receive updates when r2e is run manually.  So, an easy way to receive routine updates is to cron the command.

crontab -e

To receive updates every 10 minutes, add a line like this to your crontab.

*/10 *  * * * /usr/bin/r2e run

To receive updates every 1 minute, add a line like this to your crontab.

* *  * * * /usr/bin/r2e run

 

You’re Done!
You should now receive emails at your designated time intervals when the RSS feed has new updates!

Web filter testing…

We have been having filtering issues at work.  The only pattern I can see is that upon heavy Internet use (40+Mb) the filtering services have a hard time keeping up.  The problem is that Internet usage is impossible to predict so calling support and trying to reproduce the problem is nearly impossible.  Assuming I can get through at the time it is happening, by the time I update the support personnel on the other end of the phone, it usually starts working again.

Instead of fighting this problem further I came up with a quick script to see how often it really isn’t working, and record my results.

A script that loops though and hits a blocked page every ‘X’ seconds and then parses the HTML results to see if the redirect or block page was served.  This should show my reliability of our web filter during the day without detrimenting any network performance.  I whipped together a quick and dirty script with some functions from my other scripts.  It should do the trick.

#!/bin/bash
#######################################################
# Script created to test web filter's reliability
# It polls a webpage that is supposed to be blocked.
#
#                               Dan Kane
#######################################################

# Web filter Server IP or unique text found in the block page html
WebServer="10.9.1"

# just zeroing the counters
blockedcounter=0

# just zeroing the counters
allowedcounter=0

# Log file location
logfile="/var/log/webfilter.log"

# Blocked url
blockurl="facebook.com"

# used for my output module to show debug information
debug="1"

# used for my output module to log everything
log="1"

# sleep through the loop or go as fast as we can?
sleep="1"

#######################################################
#FUNCTIONS
#

#used for debug and logging
output(){
        if [ $debug -eq "1" ];
        then
                /bin/echo `/bin/date +"%m-%d-%Y %r"`:  $@
        fi
        if [ $log -eq "1" ];
        then
                /bin/echo `/bin/date +"%m-%d-%Y %r"` :  $@ >> $logfile
        fi
}

onexit(){
        echo "didnt work $allowedcounter   :::   worked $blockedcounter"; exit
        exit
}

#######################################################
# CODE
#

# catch traps and show results
trap "onexit" SIGINT > /dev/null

# Enter our 1 second loop
while :
do
        website=$(wget -qO- $blockurl)
        found=$(echo $website | grep $WebServer | wc -l)
        if [ $found -lt 1 ];
        then
                allowedcounter=$(( $allowedcounter + 1 ))
                output "Page NOT blocked  ---  didnt work $allowedcounter   :::   worked $blockedcounter"
        else
                blockedcounter=$(( $blockedcounter + 1 ))
                output "Page blocked  ---   didnt work $allowedcounter   :::   worked $blockedcounter"
        fi
        if [ $sleep -eq "1" ];
        then
                sleep 1
        fi
done

We will start recording the results and see what else we can find out.  If the amount of data we are inserting is too much, maybe insert results into MySQL is in order, but we will see what we find first.

Cheap spectrum analysis for wireless

When I was going through college for networking I learned to hate wireless.  I had come to learn that it was insecure, unreliable, unpredictable, and difficult to troubleshoot.  I got into a job I love and then the wireless era began.  We are now implemented hundreds of new wireless network devices a year.  We have built out our infrastructure with a lot of time and planning and so far have been quite successful.  We use primarily Cisco equipment with some Ubiquiti back-hauls for some of our outdoor setups.  Cisco provides some very basic spectrum information, for someone who has done some in-depth work with wireless and Cisco this is enough information.  It doesn’t seem to provide any visual representation of the network which can be had to explain to upper management.  Spectrum analyzers can be thousands of dollars and for what we are doing we don’t need something that granular.  We need something to tell use when channels are overloaded/consumed with interference and if antenna’s are aligned properly during setup.

We bought a few Ubiquiti bridges a while back and noticed the AirOS product line has a built in spectrum analysis.  This is handy when selecting channels as it ensures you are not selecting a channel already in use.  We have been watching Ubiquiti for some time now and when we started running into some issues with our client wireless access I went out and bought a Ubiquiti Bullet M5 and an M2.  I think total for the both I paid about $140 (includes adapters and some antennas I had lying around).  As you might guess the M2 runs off of the 2.4Ghz spectrum and the M5 runs off the 5.8Ghz spectrum.  With the Bullets, a switch, and a windows laptop/netbook and power source we can easily run up and diagnose a problem.  This setup is also very mobile and could be brought out into the field to be worked on (barring a power source of course).

At this point in time I have been unsuccessful in getting the spectrum analysis software working in anything other than windows.

I am going to assume you can get the default information for the Ubiquiti Bullet and login.  My bullet is completely stock, no configuration needed to do what I will show you.  After logging in you get some beautiful throughput graphs and other good troubleshooting information.  There is also a drop down menu near the logout button which provides you with an AirView option.  AirView is the spectrum analyzer software.

Screenshot - 02092013 - 01:15:35 PM

Airview is a Java Network Launch Protocol application which obviously requires Java.  The analyzer in my virtual machine runs about 9 frames a second and shows pretty close to real time the actual spectrum.  Here is a 2.4Ghz snapshot of my work where our 2.4Ghz spectrum is very overloaded. Sadly this is with only a few clients in the area.

 

Screenshot - 02092013 - 01:54:43 PM

The top visual: Waterfall ViewThis is a good representation of channel utilization over time.  You can clearly see if a client is connected and on what channel.

The middle visual: Waveform View
This is a good visual of how often you get a signal at a certain power or signal strength.

The bottom view:  Real-time View
This is good for seeing what is happening right this second compared to the average and maximum power levels recorded.  After letting this run for a few minutes you can compare spikes and hopefully identify any problems.

I plan on using these to make future recommendations to clients and potential trend information over a period of time.  This could help identify possible interferers that could be as simple and intermittent as a microwave.  These pictures will be invaluable when trying to explain to upper management how or why we are having problems, and what should be done to correct it.

 

Quick and easy MSRDP script

I love Linux, but as we all know we have to work on windows computers usually on a day-to-day basis.  We have servers we constantly have to RDP (remote desktop) into to work with active directory, etc.  The Terminal server client in 10.04 was all buggy and when you closed the window it would reconnect in 30 seconds.  This was especially annoying when you left a session open on your locked computer on the other side of the building and needed to hop on real quick to do something.

ubuntu-Terminal-Server-Client

I found out that the problem was that certain libraries had bee updated and caused this bug.   I decided using rdesktop for a while would suffice and created a launcher on my panel to run this command.  It wasn’t pretty for the longest time, a bash terminal asking for usernames, etc.  I really didn’t like it.  I stumbled across zenity a while ago and decided to use that to hide the password and pass that to the rdesktop command.  It is pretty simple actually.
I prefer to hard-code my username and domain in so that I don’t have to constantly fill it out, however more zenity windows could easily be added if more security or flexibility would be needed.  I saved this into a script, made it executable, and then created a launcher to run the script.  I haven’t spent much time on it but I could not just put this code into a launcher and run it (on XFCE, I suppose other frontends like gnome2 or unity might work).

rdesktop -u <Username> -d <domain> -g 1280x1024 $(zenity --entry --text="Hostname/IP please...") -p $(zenity --password --text="Password Please...")

The code above in a launcher provides these dialogue boxes:

Username

password

 

Zenity provides a lot of flexibility in bash scripting so end users don’t have to see a techy/confusing bash window to do something simple.  Zenity options:

OPTIONS
       This program follows the usual  GNU  command  line  syntax,  with  long
       options starting with two dashes (`-').

       Dialog options

       --calendar
              Display calendar dialog

       --entry
              Display text entry dialog

       --error
              Display error dialog

       --file-selection
              Display file selection dialog

       --info Display info dialog

       --list Display list dialog

       --notification
              Display notification

       --progress
              Display progress indication dialog

       --question
              Display question dialog

       --text-info
              Display text information dialog

       --warning
              Display warning dialog

       --scale
              Display scale dialog

       --color-selection
              Display color selection dialog

       --password
              Display password dialog

       --forms
              Display forms dialog

We will definitely be using zenity to make some things more user friendly…

Linux Vinyl Plotting With A Gerber enVision Plotter

I recently had the opportunity to work with an older Gerber enVision plotter from a township.  I had major difficulties getting the old version of Omega working with their USB licensing stick, and I knew that getting anything like this working on Windows without proper licensing would be an inadvisable, and rocky road ahead.

I decided to look into open source solutions, and I found out that Inkscape can do vinyl plotting with an extension called InkCut.

This tutorial will attempt to comprehensively explain how I got this working.  I am by no means an expert, but I found very limited web resources out there on this topic, and I am hopeful that someone will eventually stumble on this article and find it useful.

Background
A simple, free, and open source solution to an expensive and complex problem: How do we plot stuff with our vinyl plotter?

Assumptions
This tutorial will assume that you have some prior experience with the Linux terminal and the Linux desktop.  On my test computer, I was working with a clean installation of Ubuntu 12.04 (12.04.1) LTS.  However, any Ubuntu or Debian flavor should be acceptable.  I am also assuming you have an older Gerber enVision series plotter.  If this is not the case, I imagine most of these instructions will apply fairly well to any kind of vinyl plotter.

The Plotter
Here are some photos of the Gerber enVision plotter I was working with.

2013-01-01 13.20.33

2013-01-01 13.20.42

 

The plotter interfaced with the computer using a serial connection.

Ubuntu & This Plotter
In order to establish proper communications between the computer and the plotter, I had to ensure some things were true.  I reset my plotter to the factory default settings, which resulted in a condition where I could assume this about my serial connection:

Baud: 9600
Data Length: 8
Parity: None
Stop Bit: 1

In order to ensure communication with non-root users, I took a questionable approach, and I decided to:

chmod 777 /dev/ttyS0

This did not need to be a very secure environment (we didn’t even password protect the workstation’s desktop) so I figured this would be a reasonable approach, rather than troubleshooting why CUPS was getting permission denied errors while printing to the serial port.

Configure The Plotter In CUPS
To install this plotter in CUPS, you’ll want to open up your Printer configuration area from the System menu.

Click “Add” to add a printer.

CUPS Add A Printer

If you don’t have the option for “Serial Port #1”, then use the Device URI “serial:/dev/ttyS0“.

Serial Printer

 

You will want to select Generic as the make of printer.

Generic Printer

 

Then, select “Raw Queue”  This will work with InkCut providing the HPGL instructions.

Generic Printer - Raw Queue

Obviously, it doesn’t matter what you name your plotter, or what description you give it, just give it something that makes sense.

Finalize Printer Settings

Install Inkscape

Next, we want to install Inkscape.  You can do this from Apt on Ubuntu, as such:

sudo apt-get install inkscape

Once you’re done with the installation, start Inkscape for the first time.  This will create blank default configuration folders in your profile which are necessary for the next step.

Inkscape

 

Then, go ahead and close Inkscape, and move on to installing InkCut!

Install InkCut
You can download the latest version of InkCut from their website.  At the time of this writing, the version is 1.0, and can be found here.

Once you’ve downloaded InkCut, go ahead and extract the file using this command.  It will put the files right where they need to be for you!

tar -xzvf InkCut-1.0.tar.gz -C ~/.config/inkscape/extensions/

Now, when you start Inkscape, you should see InkCut on the Extensions menu, under Cutter/Plotter.

InkCut

Screencast How-To’s
 I have also created some screencasts to explain how to set up the document for your plotter, as well as how to plot some basic text.

Document Setup – Screencast
(Download OGV)

Let’s Plot Some Text! – Screencast
(Download OGV)

Remember, when plotting your text, you need to make sure your objects are converted to paths, by highlighting your text and going to Path > Object To Path.  You also want to make sure your paths aren’t grouped, by right clicking each block of text and clicking Ungroup.

Then you should be good to go to Extensions > Cutter/Plotter > InkCut v1.0 and start plotting!