anchor.diff:      viewModel.newPrice(data.price);
     });
   
  +  // poloniex websocket API broken as of 2016-01-20
  +  // var exampleSocket = new WebSocket("wss://api.poloniex.com", "ticker");
  +  // exampleSocket.onMessage = function (event) {
  +  //   console.log(event.data);
  +  // }
  +
  +  // since poloniex websocket is broken, poll JSON api every 5 seconds
  +  window.setInterval(function () {
  +    fetchDashLast();
  +  }, 5000)
  +
     ko.applyBindings(viewModel);
   });
   var viewModel = new BitstampViewModel();
  
positive.code: function BitstampViewModel() {
    var self = this;
  
    // set initial price here, or just leave as-was...
    //self.price = ko.observable(0);
    var current_val = parseFloat(jQuery('#btc_usd_price').text());
    var current_bits_ts = jQuery('#bits_ts').text();
  
    self.price = ko.observable(current_val);
    self.bitsTs = ko.observable(getNow());
  
    self.newPrice = function(price) {
      self.price(price);
      self.bitsTs(getNow());
    };
  
    self.formattedPrice = ko.computed(function() {
        return self.price().toFixed(2);
    });
  
    // can use $.getJSON to grab 1st value... or pull from DB to initialize it.
  }
  
  $(document).ready(function() {
  
negative.code: <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.1/moment.min.js" type="text/javascript"></script>
  <script src="http://js.pusher.com/2.2/pusher.min.js" type="text/javascript"></script>
  <script type="text/javascript">
  var getNow = function () {
    var formattedDate = moment().utc().format('YYYY-MM-DD HH:mm:ss UTC');
    return formattedDate;
  