Archive

Fetch the local weather and optionally put it on the footer of your motd

I wanted to put my local weather on the bottom of my /etc/motd – because i’m dorky like that.

I found a bunch of random ways to fetch the weather forecast in plain text… and a lot of complicated grep/sed/curl commands to get there. I wanted something as simple as possible.

So first, the shell script to get the weather in plain text…

echo " Weather for Palmyra, Virginia:"
lynx --dump "http://mobile.weather.gov/port_mp_ns.php?CityName=Palmyra&site=AKQ&State=VA&warnzone=VAZ048/" | head -n 7 | tail -n 1 | sed -e 's/\ //g' | sed -e 's/°/°/'

The echo is just for looks, obviously. You’ll need to change it to whatever you want it to be headed up by… or remove it completely.

The first lynx command fetches the website how a browser sees it.
The second head takes only the top portion of that resulting website.
The third command, tail, only takes the bottom line of the resulting head display.
The fourth sed command takes all the spaces out.
The fifth command gets rid of some weird character interpritation from lynx and makes it nicely have a Fahrenheit symbol.

You’ll need to get your own weather url and replace mine with it by entering your zip code here: http://mobile.weather.gov/.

Okay, so now we have a way to get the local weather. I actually setup an alias in .bashrc for this, too.

Next, we have the script that puts this at the bottom of your /etc/motd file. That script, in my case, assumes that you have sudo without entering your password:


cat ~/sh/backup/motd.backup > ~/motd.new
sh ~/sh/weather.sh >> ~/motd.new
echo "" >> ~/motd.new
sudo mv ~/motd.new /etc/motd

The first line copies my standard motd message into place within what will be the new motd file. This makes sure we maintain the same static message at the top. You’ll have to update that line and point it to a basic motd message file that serves as a template.
The second line, runs my weather script, which you’ll need to update and point to where yours is.
The third adds a blank line to the bottom of the new motd file, for better formatting.
The last of the 3 lines moves the new motd into place on top of your current.

Then, I scheduled that last script to run each hour in my user’s crontab with the command ‘crontab -e’:
0 * * * * ~/sh/generateMOTD.sh

Adobe’s AC_FL_RunContent and Lightbox 2 can’t work at the same time in IE 7

I don’t know much javascript, but from what I can see… using both the AC_FL_RunContent.js script from Adobe for embedding flash objects and Lightbox 2 from http://www.huddletogether.com/projects/lightbox2/ won’t work at the same time in IE7.

It looks like IE7’s fault – like normal – because Chrome and FireFox do it right. Taking out either lightbox’s javascript or Adobe’s makes it work… but no combination of the two I see does.

Anyway, If i have both of these javascript files in the header of any web page, I get the following:

Line: 3975
Char: 9
Error: Object doesn’t support this property or method
Clode: 0

The image then comes up as if it were linked to directly.

Total crap!!! Anyone else getting this out there?

Quickly see how much space each object in your current dir is using via command line in linux

EDIT: Apparently this is done with du -sh * for all files, du -sh */ for all directories. As a side note, you can use c in there to calculate the total size of all listed items. Thanks Yan Morin!

Sounds kinda stupid, but I was unable to find a trigger with du or dh to show the size of the directories in my current directory. If i did du -h it showed me the size of the file, but also showed me the size of every file within. I just wanted a high level overview of the total size of each folder I had in front of me.

I noticed du -h DirName showed the size of the dir or file on the last line….

A quick for loop solved the problem! Maybe it will be useful for someone else, too!

for d in *; do du -h "$d" | tail -n 1; done

Find an IP address and tons more in Apache logs with Regular Expression and egrep or grep

I wanted to look through my apache logs and pull out a list of IPs. I wanted to use SSH. I am kinda new to regular expression so it took me 3 tries, but I ended up with this big string of junk to do just that. The -o tag makes it only spit out the IP out of each line while the rest will grab any grouping of numbers separated by 4 periods.

egrep -o ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+

the ^ means beginning of line
[0-9] means any number, 1-10
the + means one or more times in a row
the \ means literally interpret the next character

Then i went a step further and wanted to figure out how many UNIQUE users I had visiting for a particular access log.

cat access.log.0 | egrep -o ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ | sort | uniq -c | sort

note: uniq -u -c seemed to leave duplicates… this worked a little slower, but reliably. I’m probably doing something wrong there.

Okay so now the NEXT step! Lets do a reverse lookup on all those IPs to see some hostnames… why not?!?!?! We’re going crazy here.

for ip in `cat access.log.0 | egrep -o ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ | sort | uniq`; do dig -x $ip | grep PTR | egrep -v ^\; >> hosts.txt; done

The for loop above lists all the reverse PTR records for every unique IP in the entire log file. The output is dumped to hosts.txt. I had to do a little hackery and exclude lines starting with ; because i was getting duplicates, but it worked. Phew, that command took awhile. I hope my shared web host doesn’t mind about 4,000 reverse DNS lookups.

So what will he do next?! Well, to avoid running that big command ever again, we dumped the results to hosts.txt. Try doing a grep on that for .gov, or something like that. That would look like this:

grep \.gov\.$ hosts.txt

That should roughly be all the government addresses that hit my web server.
Then you could count how many that is, too:

grep \.gov\.$ hosts.txt | uniq | wc -l

Nice!




WordPress Loves AJAX