Coder Social home page Coder Social logo

timernt / shim Goto Github PK

View Code? Open in Web Editor NEW

This project forked from marstall/shim

1.0 1.0 0.0 234 KB

Shim is a node.js-based browser-compatibility tool that lets you synchronize several devices/browsers and surf the same pages simultaneously on all of them.

shim's Introduction

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 [email protected]:marstall/shim.git
3 cd shim
4 sudo ./setup.sh
5 Under Control Panel/Sharing, turn on Internet Sharing (select "Share your connection from [Ethernet] To Computers using [Airport]")
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

shim's People

Contributors

marstall avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.