Skip to content
/ shim Public
forked from marstall/shim

Shim is a node.js app that enables simultaneous, synced web surfing across a variety of devices and browsers.

Notifications You must be signed in to change notification settings

scottjehl/shim

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ABOUT SHIM
Shim is a node.js app that enables simultaneous, synced web surfing across a variety of devices and browsers.

Shim was developed by the Boston Globe as a timesaving way to see how its web sites render on a variety of gadgets & browsers. It works by tweaking Wifi to enable the easy synchronization of browsing sessions across several devices, with no client configuration needed.

This makes cross-browser and cross-device testing much easier. With one click, it's possible to see a page rendered on devices of varying screen size, input technology, etc.

Imagine a group of people browsing using a variety of devices, all connected to a single Wifi access point that's running Shim. Whenever one of them clicks on a link, all the others will be automatically redirected to the linked page. 

There is no device-specific configuration required, so even simple gadgets can synchronize. We've tested this so far with iPad, iPhone, Nexus S, Samsung Galaxy Tab, Motorola Xoom, Kindle 3, Barnes & Noble Color Nook, Windows Phone 7 and a variety of desktop browsers, but it should work on most current devices that have a Javascript-enabled web browser.

We've achieved this by turning on Internet Sharing on a stock Mac Book Pro, then modifying it at the system level to act as a transparent proxy. The laptop intercepts all wifi traffic and redirects it to a custom node.js server, which inserts a javascript "shim" at the head of each web page that is visited. The shim, once loaded in a device's browser, opens and maintains a socket connection to the server. Whenever a new page is requested, the page's url is broadcast to all connected browsers, which then redirect themselves to that url, keeping all devices in sync.

There have been a few requests to use the tool, so we're open sourcing it for all to use. Please feel free to modify it as you wish. We ask that you keep this "ABOUT SHIM" section at the the top of the README file. THANKS!

Shim was written in 2011 by Chris Marstall, Creative Technologist at the Boston Globe.

REQUIREMENTS
* Shim must be installed on a 10.6+ Mac with both wired *and* wireless network interfaces (for example, a newer stock MacBook). The wired interface will be used to communicate with the internet; the wireless interface will be used to serve pages to devices.

INSTALLING SHIM
1 download and install the OS X NodeJS package: http://sites.google.com/site/nodejsmacosx
2 git clone git@github.com:marstall/shim.git
3 cd shim
4 sudo ./setup.sh
5 Under Control Panel/Sharing, turn on Internet Sharing
5 restart your Mac
6 cd shim
7 sudo ./configure_proxy.sh 


RUNNING SHIM
cd shim
node shim.js

USING SHIM
1. Connect a given device to the SHIM server's Wifi AP.
2. On that device, google the word "attach" 
3. You should be automagically sent directly to the shim homepage, which prompts you to enter a url
4. Enter any url - your browser will be redirected there.
5. Grab other devices & google "attach" on them - they should be redirected to the same url.
6. On any attached device, click on a link. All devices should navigate to that page.
7. to reset all devices to the Shim homepage, google "shimreset"

ALTERNATE INTERFACE
To set the current page, you can also simply just append the query parameter 's:33t' to any url. So http://foo.com would become http://foo.com/?s:33t . This will cause all currently attached devices to redirect to that url.

AFTER A SYSTEM RESTART
run ./configure_proxy.sh

About

Shim is a node.js app that enables simultaneous, synced web surfing across a variety of devices and browsers.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages