feb
1
7
Instant Web Sharing on Your Mac
I came across a few articles recently that point out how to instantly share a folder on your computer. They basically ride on top of this elegant python script:
python -m SimpleHTTPServer
It works great but I wanted to improve on it in a number of ways:
-
Automatically copy a URI into my clipboard so I can easily paste it to others.
-
Make that URI nicer then just an IP address.
-
Use a non-standard port, for security.
-
Open in a new tab so I can keep working in the directory and yet still monitor the HTTP requests being made.
Here was what I produced. (Its up in my ~/bin.)
#!/bin/bash
# Start Date: Sunday February 8, 2009
# Current Version: 0.9
# Author: Joseph Pecoraro
# Contact: joepeck02@gmail.com
#
# Decription: Immediately Share the current directory
# in a new tab so you can monitor the requests made
# have your original tab to continue working in that
# directory. Meant for Mac OS X.
#
# 1. Echos the URI
# 2. Puts the URI into your Clipboard
# 3. Opens a new tab in the terminal
# 4. Changes Directory to the other tabs directory
# 5. Echos the URI
# 6. Runs the Web Server
# 7. Optionally Opens in Safari
#
# Sources that Helped:
# New Tab Here: http://justinfrench.com/index.php?id=231
# HTTPServer: http://www.commandlinefu.com/commands/view/71/
# Paul Berens: http://zibundemo.blogspot.com/
#
# -----------------
# Host and Port
# -----------------
# This gets your ip address and converts it to a nice string
es_host=$(curl --silent www.whatismyip.com/automation/n09230945.asp)
es_host=$(nslookup $es_host | awk '/name =/{print substr($4,1,length($4)-1)}')
es_port="8000"
# -----------------
# Script Below
# -----------------
echo "http://$es_host:$es_port"
echo -n "http://$es_host:$es_port" | pbcopy
osascript -e "
Tell application \"Terminal\"
activate
tell application \"System Events\" to tell process \"Terminal\" to keystroke \"t\" using command down
do script with command \"cd '$(pwd)'\" in selected tab of the front window
do script with command \"clear; echo '$es_host:$es_port/'\" in selected tab of the front window
do script with command \"python -m SimpleHTTPServer $es_port\" in selected tab of the front window
end tell" &> /dev/null
# Optional: Open Safari, Just Uncomment the next line
# open "http://$es_host:$es_port"
# Cleanup
unset es_host
unset es_port
Now that should work on any Mac. And it should give a nicer URL then an ugly IP address. You should see something like this:
As soon as it starts you can paste the URL to anyone you’re chatting with. It couldn’t be simpler!
If you’re experienced enough with DNS servers and you’ve given your computer a Dynamic Name you can customize the script. Paul Berens gave me a great suggestion to determine if I’m on my local network at home. I can check the MAC address of my default gateway (my wireless router). That is a quick check to see if I’m at home. If I’m at home I use my bogojoker.is-a-geek.com URI automatically! Otherwise it defaults to generating the dynamic address generation. Check it out:
# -----------------
# Host and Port
# -----------------
# Mac Address of my Router At Home
So now when I run easy_share at my house it always throws out bogojoker.is-a-geek.com URIs. Much nicer on the eyes and easy to remember. I’ll write about dynamic names like this another time!