text:
'use strict';

/* Controllers */

// TODO: test
function AlertController($scope, Alert) {

  Alert.note('Note: This is a shared public playground.' +
             ' Anyone can read, modify or delete your projects,' +
             ' files and data at any time. Your private source' +
             ' code and data are not safe here.');

  $scope.alerts = Alert.alerts;

  $scope.closeAlert = function(idx) {
    Alert.remove_alert(idx);
  };

}

function HeaderController($scope, $location) {

  $scope.alreadyhome = function() {
    return $location.path() == '/playground/';
  };

}

// TODO: test
function RenameProjectController($scope, $log, dialog, project_name) {

  $scope.project_name = project_name;

  $scope.close = function(project_name) {
    dialog.close(project_name);
  };

}

function PageController($scope, $http, DoSerial, $routeParams, $window,
                        $dialog, $location, $log, WindowService,
                        IframedDetector, ConfirmDialog) {

  function getconfig() {
    $scope.status = 'Retrieving configuration';
    return $http.get('/playground/getconfig')
    .success(function(data, status, headers, config) {
       $scope.config = data;
    });
  };

  $scope.retrieveproject = function() {
      $scope.status = 'Retrieving project ' + project_id;
      var project_id = $scope.namespace();
      return $http.get('/playground/p/' + encodeURI(project_id) + '/retrieve')
      .success(function(data, status, headers, config) {
          $scope.projects.push(data);
      });
  };

  function getprojects() {
    $scope.status = 'Retrieving user projects';
    return $http.get('/playground/getprojects')
    .success(function(data, status, headers, config) {
      $scope.projects = data;
    });
  }

  function get_template_projects() {
    $scope.status = 'Retrieving template projects';
    return $http.get('/playground/gettemplateprojects')
    .success(function(data, status, headers, config) {
      $scope.template_projects = data;
    });
  }

  DoSerial
  .then(getconfig)
  .then(get_template_projects)
  .then(getprojects);

  $scope.namespace = function() {
    return $routeParams.project_id ||
           ($scope.config && $scope.config.playground_namespace);
  };

  $scope.datastore_admin = function() {
    WindowService.open('/playground/datastore/' + $scope.namespace(), '_blank');
  };

  $scope.memcache_admin = function() {
    WindowService.open('/playground/memcache/' + $scope.namespace(), '_blank');
  };

  $scope.big_red_button = function() {
    DoSerial
    .then(function() {
      return $http.post('/playground/nuke')
      .success(function(data, status, headers, config) {
        WindowService.reload();
      });
    });
  };

  // TODO: test
  function prompt_oauth2_admin(credential) {
    $dialog.dialog({
        controller: 'OAuth2AdminController',
        templateUrl: '/playground/oauth2_admin.html',
        resolve: {
            key: credential.key,
            url: credential.url,
            client_id: credential.client_id,
            client_secret: credential.client_secret,
        },
    })
    .open().then(function(credential) {
      $http.post('/playground/oauth2_admin', credential);
    });
  }

  // TODO: test
  $scope.oauth2_admin = function(key, url) {
    $http.post('/playground/oauth2_admin', {key: key, url: url})
    .success(function(data, status, headers, config) {
      prompt_oauth2_admin(data);
    });
  };

  $scope.has_projects = function() {
    for (var i in $scope.projects) {
      return true;
    }
    return false;
  };

  $scope.select_project = function(project) {
    DoSerial
    .then(function() {
      return $http.post('/playground/p/' + encodeURI(project.key) + '/touch')
      .success(function(data, status, headers, config) {
        for (var i in $scope.projects) {
          if ($scope.projects[i] == project) {
            $scope.projects[i] = project = data;
            break;
          }
        }
        $location.path('/playground/p/' + encodeURI(project.key));
        //Gets rid of the template_url query parameter
        $location.search({});
      });
    });
  };

  $scope.delete_project = function(project) {
    $scope.project = undefined;
    $http.post('/playground/p/' + encodeURI(project.key) + '/delete')
    .success(function(data, status, headers, config) {
      for (var i in $scope.projects) {
        if ($scope.projects[i] == project) {
          $scope.projects.splice(i, 1);
          break;
        }
      }
      for (var i in $scope.template_projects) {
        if ($scope.template_projects[i] == project) {
          $scope.template_projects.splice(i, 1);
          break;
        }
      }
      $location.path('/playground/');
    });
  };

  $scope.prompt_delete_project = function(project) {
    var title = 'Confirm project deletion';
    var msg = 'Are you sure you want to delete project "' + project.name +
              '"?';
    var okButtonText = 'DELETE PROJECT';
    var okButtonClass = 'btn btn-danger';
    var callback = function() {
      $scope.delete_project(project);
    }

    ConfirmDialog(title, msg, okButtonText, okButtonClass, callback);
  };

  $scope.set_loaded = function() {
    $scope.loaded = true;
  }

}

function MainController($scope, $http, $window, $location, $log, $routeParams,
                        $q, Alert, DoSerial) {

  // TODO: test
  DoSerial
  .then(function() {
    var template_url = $routeParams.template_url;
    if (template_url) {
      var expiration = parseInt($routeParams.expiration);
      return create_project_from_template(template_url, expiration);
    } else {
      $scope.set_loaded();
    }
  });

  // TODO: test
  function by_template_url(template_url, projects) {
    var results = [];
    for (var i in projects) {
      if (projects[i].template_url == template_url) {
        results.push(projects[i]);
      }
    }
    return results;
  }

  // TODO: test
  $scope.new_project_by_url = function(repo_url) {
    var deferred = $q.defer();
    for (var i in $scope.template_projects) {
      if ($scope.template_projects[i].template_url == repo_url) {
        throw 'Template already exists';
      }
    }
    DoSerial
    .then(function() {
      var data = {
        'name': '(Creating template project...)',
        'description': '(Please wait...)',
        'in_pogress_task_name': 'foo'
      };
      $scope.template_projects.push(data);
    });
    DoSerial
    .then(function() {
      return $http.post('/playground/create_template_project_by_url', {
          repo_url: repo_url
      })
      .success(function(data, status, headers, config) {
        $scope.template_projects.pop();
        $scope.template_projects.push(data);
        deferred.resolve();
      })
      .error(function(data, status, headers, config) {
        $scope.template_projects.pop();
        deferred.reject('Failed to create template project due to HTTP error ' +
                        status + ' ' + data);
      });
    });
    return deferred.promise;
  };

  // TODO: test
  function create_project_from_template(template_url, expiration) {
    var deferred = $q.defer();

    var user_projects = by_template_url(template_url, $scope.projects);
    var template_projects = by_template_url(template_url,
                                            $scope.template_projects);

    if (user_projects.length == 1) {
      $scope.status = 'Opening project';
      Alert.info('Found an existing project based on the requested template');
      $scope.select_project(user_projects[0]);
      deferred.resolve();
      return deferred.promise;
    }

    if (user_projects.length > 1) {
      Alert.info('You have ' + user_projects.length +
                 ' projects based on the requested template');
      // TODO: make these assignments work
      //$scope.projects = user_projects;
      //$scope.template_projects = template_projects;
      deferred.resolve();
      return deferred.promise;
    }

    if (template_projects.length == 0) {
      $scope.status = 'Creating new template project based on ' + template_url;
      deferred.resolve();
      deferred.promise
      .then(function() {
        return $scope.new_project_by_url(template_url);
      });
      return deferred.promise;
    }

    if (template_projects.length > 1) {
      // TODO: investigate using deferred.reject() instead of 'throw'
      throw 'Found ' + template_projects.length +
            ' template projects with template URL ' + template_url;
    }

    deferred.promise
    .then(function() {
      $scope.status = 'Cloning project from template ' + template_url;
      return $scope.new_project(template_projects[0], expiration);
    })
    .then(function() {
      var user_projects = by_template_url(template_url, $scope.projects);
      if (user_projects.length != 1) {
        throw 'Unexpectedly found ' + user_projects.length +
              ' projects with template URL ' + template_url;
      }
      $scope.select_project(user_projects[0]);
    });
    deferred.resolve();
    return deferred.promise;
  }

  $scope.login = function() {
    $window.location.replace('/playground/login');
  };

  // TODO: test
  $scope.recreate_template_project = function(template_project) {
    template_project.in_progress_task_name = 'foo'
    DoSerial
    .then(function() {
      return $http.post('/playground/recreate_template_project', {
          project_id: template_project.key
      });
    });
  };

  $scope.new_project = function(template_project, expiration) {
    var deferred = $q.defer();
    var data = {
      'name': '(Creating project...)',
      'description': '(Please wait and then refresh this page.)',
    };
    $scope.projects.push(data);
    $http.post('/playground/p/' + encodeURI(template_project.key) + '/copy', {
      'expiration': expiration
    })
    .success(function(data, status, headers, config) {
      $scope.projects.pop();
      $scope.projects.push(data);
      deferred.resolve();
    })
    .error(function(data, status, headers, config) {
      $scope.projects.pop();
      deferred.reject('Failed to copy project due to HTTP error ' +
                      status + ' ' + data);
    });
    return deferred.promise;
  };

}

// TODO: test
function NewFileController($scope, $log, dialog, path) {

  $scope.path = path;

  $scope.close = function(path) {
    dialog.close(path);
  };

}

// TODO: test
function RenameFileController($scope, $log, dialog, path) {

  $scope.path = path;

  $scope.close = function(path) {
    dialog.close(path);
  };

}

// TODO: test
function OAuth2AdminController($scope, $log, dialog, key, url, client_id,
                               client_secret) {

  $scope.key = key;
  $scope.url = url;
  $scope.client_id = client_id;
  $scope.client_secret = client_secret;

  $scope.close = function(client_id, client_secret) {
    dialog.close({key: key, url: url, client_id: client_id,
                  client_secret: client_secret});
  };

}

function ProjectController($scope, $browser, $http, $routeParams, $window,
                           $dialog, $location, $log, DoSerial, DomElementById,
                           WrappedElementById, Backoff, ConfirmDialog) {

  // keep in sync with appengine_config.py
  var MIMIC_PROJECT_ID_QUERY_PARAM = '_mimic_project';

  // TODO: remove; don't maintain DOM references
  var _output_window;

  // TODO: remove; don't maintain DOM references
  var _popout = false;

  // TODO: remove once file contents are returned in JSON response
  $scope.no_json_transform = function(data) { return data; };

  function toquerystring(params) {
      var qs = '';
      angular.forEach(params, function(value, key) {
          qs += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(value);
      });
      return qs.replace('&', '?');
  }

  $scope.url_of = function(control_path, params) {
    var p = {};
    p[MIMIC_PROJECT_ID_QUERY_PARAM] = $scope.project.key;
    angular.extend(p, params);
    var qs = toquerystring(p);
    var url = '/_ah/mimic/' + control_path + qs;
    if ($scope.config.PLAYGROUND_USER_CONTENT_HOST) {
      url = '//' + $scope.config.PLAYGROUND_USER_CONTENT_HOST + url;
    }
    return url;
  };

  $scope.image_url_of = function(file) {
    return (file && $scope.is_image_mime_type(file.mime_type)) ?
        $scope.url_of('file', {path: file.path}) : '';
  };

  // TODO: this.foo = function() {...} // for testability
  $scope._get = function(file, success_cb) {
    if (file.hasOwnProperty('contents')) {
      success_cb();
      return;
    }
    var url = $scope.url_of('file', {path: file.path});
    $http.get(url, {transformResponse: $scope.no_json_transform})
    .success(function(data, status, headers, config) {
      file.contents = data;
      file.dirty = false;
      success_cb();
    });
  };

  $scope.is_image_mime_type = function(mime_type) {
    return /^image\//.test(mime_type);
  };

  $scope._list_files = function() {
    var url = $scope.url_of('dir', {});
    return $http.get(url)
    .success(function(data, status, headers, config) {
      $scope.files = {};
      angular.forEach(data, function(props, i) {
        $scope.files[props.path] = props;
      });
    });
  };

  // TODO: test
  function _save(path) {
    var file = $scope.files[path];
    if (!file.dirty) {
      return;
    }
    file.dirty = false;
    $scope.filestatus = 'Saving ' + path + ' ...';
    var url = $scope.url_of('file', {path: file.path});
    return $http.put(url, file.contents, {
                     headers: {'Content-Type': 'text/plain; charset=utf-8'}
    })
    .success(function(data, status, headers, config) {
      $scope.filestatus = ''; // saved
      Backoff.reset();
    })
    .error(function(data, status, headers, config) {
      $scope.filestatus = 'Failed to save ' + path;
      file.dirty = true;
      // implement seconds() function
      var secs = Backoff.backoff() / 1000;
      $log.warn(path, 'failed to save; will retry in', secs, 'secs');
      Backoff.schedule(_save_dirty_files);
    });
  }

  // TODO: test
  function _save_dirty_files() {
    for (var path in $scope.files) {
      if ($scope.files[path].dirty) {
        var dirtypath = path;
        DoSerial
        .then(function() {
          return _save(dirtypath);
        });
        break;
      }
    }
  }

  // TODO: test
  $scope.create_on_change_closure = function(file) {
    return function(instance, changeObj) {
      if (file.dirty) {
        return;
      }
      file.dirty = true;
      $scope.$apply(); // need to apply here for dirty mark
      Backoff.schedule(_save_dirty_files);
    };
  };

  $scope.select_file = function(file) {
    $location.hash(file.path);
    if ($scope.is_image_mime_type(file.mime_type)) {
      $scope.current_file = file;
      return;
    }
    $scope._get(file, function() {
      $scope.current_file = file;
    });
  };

  $scope.set_path = function(path) {
    $location.hash(path);
  };

  $scope._select_a_file = function() {
    var path = $location.hash();
    var file = $scope.files[path];
    if (file) {
      $scope.select_file(file);
      return;
    }
    // select first file
    for (var path in $scope.files) {
      $scope.select_file($scope.files[path]);
      break;
    }
  };

  function setcurrentproject() {
      for (var i in $scope.projects) {
          if ($scope.projects[i].key == $routeParams.project_id) {
              $scope.project = $scope.projects[i];
              return true;
          }
      }
      return false;
  }

  DoSerial
  .then(function() {
    if (!setcurrentproject()) {
      // project_id is not in $scope.projects
      return $scope.retrieveproject()
      .then(setcurrentproject);
    }
  })
  .then($scope._list_files)
  .then($scope._select_a_file)
  .then($scope.set_loaded);

  // TODO: test
  $scope.insert_path = function(path) {
    var file = $scope.files[path];
    if (!file) {
      // Create a file on the server side and use the result.
      $http.put($scope.url_of('file', {path: path}), '', {
        headers: {'Content-Type': 'text/plain; charset=utf-8'}
      })
      .success(function(data, status, header, config) {
        $scope.files[path] = data;
        $scope.select_file(data);
      })
      .error(function(data, status, header, config) {
        // Note: If the mimic encounters an unhandled exception like
        // DeadlineExceededError, the response doesn't have a CORS
        // header under the current implementation, so that the status
        // here just becomes 0.
        throw Error('Failed to create a new file with a status code: ' +
                    status + '.');
      });
    } else {
      $scope.select_file(file);
    }
  };

  // TODO: test
  $scope.prompt_new_file = function() {
    $dialog.dialog({
        controller: 'NewFileController',
        templateUrl: '/playground/new_file_modal.html',
        resolve: {path: ''},
    })
    .open().then(function(path) {
      if (path) {
        // remove leading and trailing slash(es)
        path = path.replace(/^\/*(.*?)\/*$/, '$1');
        $scope.insert_path(path);
      }
    });
  };

  // TODO: remove
  function hide_context_menus() {
    $scope.showfilecontextmenu = false;
    $scope.showprojectcontextmenu = false;
  }

  // TODO: remove
  window.addEventListener('click', function(evt) {
    hide_context_menus();
    $scope.$apply();
  }, false);

  // TODO: test
  // TODO: replace with $dialog
  $scope.project_context_menu = function(evt) {
    evt.stopPropagation();
    hide_context_menus();
    $scope.showprojectcontextmenu = true;
    $scope.project_context_menu_pos = [evt.pageX, evt.pageY];
  };

  // TODO: test
  function project_rename(project, name) {
    DoSerial
    .then(function() {
      return $http.post('rename', {newname: name})
      .success(function(data, status, headers, config) {
        for (var i in $scope.projects) {
          if ($scope.projects[i] == project) {
            $scope.project = $scope.projects[i] = data;
            break;
          }
        }
      });
    });
  }

  // TODO: test
  $scope.prompt_project_rename = function(project) {
    $dialog.dialog({
        controller: 'RenameProjectController',
        templateUrl: '/playground/rename_project_modal.html',
        resolve: {project_name: project.name},
    })
    .open().then(function(name) {
      if (name) {
        project_rename(project, name);
      }
    });
  };

  // TODO: test
  $scope.file_context_menu = function(evt, file) {
    evt.stopPropagation();
    hide_context_menus();
    $scope.select_file(file);
    $scope.showfilecontextmenu = true;
    $scope.file_context_menu_pos = [evt.pageX, evt.pageY];
  };

  // TODO: test
  function delete_file(file) {
    DoSerial
    .then(function() {
      var url = $scope.url_of('delete', {path: file.path});
      return $http.post(url)
      .success(function(data, status, headers, config) {
        delete $scope.files[file.path];
        $scope._select_a_file();
      });
    });
  };

  // TODO: test
  $scope.prompt_delete_file = function(file) {
    var title = 'Confirm file deletion';
    var msg = 'Are you sure you want to delete file "' +
              $scope.current_file.path + '"?';
    var okButtonText = 'DELETE FILE';
    var okButtonClass = 'btn btn-danger';
    var callback = function() {
      delete_file(file);
    }

    ConfirmDialog(title, msg, okButtonText, okButtonClass, callback);
  }

  // TODO: test
  function file_rename(file, path) {
    if (!path || path == file.path) {
      return;
    }
    DoSerial
    .then(function() {
      var oldpath = file.path;
      var url = $scope.url_of('move', {path: file.path, newpath: path});
      return $http.post(url)
      .success(function(data, status, headers, config) {
        delete $scope.files[oldpath];
        file.path = path;
        $scope.files[path] = file;
        // TODO: have server send updated MIME type
        $scope.current_file = file;
      });
    });
  };

  // TODO: test
  $scope.prompt_file_rename = function(file) {
    $dialog.dialog({
        controller: 'RenameFileController',
        templateUrl: '/playground/rename_file_modal.html',
        resolve: {path: file.path},
    })
    .open().then(function(path) {
      if (!path) {
        return;
      }
      while (path[0] == '/') {
        path = path.substr(1);
      }
      file_rename(file, path);
    });
  };

  // TODO: test
  $scope.popout = function() {
    _popout = true;
    _output_window = undefined;
  };

  // TODO: test
  $scope.select_me = function(evt) {
    var elem = evt.srcElement;
    elem.focus();
    elem.select();
  };

  // TODO: test
  $scope.run = function() {
    return DoSerial
    .then(function() {
      _save_dirty_files();
    })
    .then(function() {
      // TODO: try to avoid DOM access
      var container = WrappedElementById('output-container');
      if (_output_window && _output_window.closed) {
        _popout = false;
      }
      if (_popout) {
        container.addClass('hidden');
        // TODO: create open window service (so we can test)
        // TODO: read https://github.com/vojtajina/ng-directive-testing
        _output_window = window.open($scope.project.run_url,
                                     $scope.project.key);
      } else {
        container.removeClass('hidden');
        var iframe = WrappedElementById('output-iframe');
        iframe.attr('src', $scope.project.run_url);
      }
    });
  };

  $scope.reset_project = function() {
    var project_id = $scope.namespace();
    return $http.post('/playground/p/' + encodeURI(project_id) + '/reset')
    .success(function(data, status, headers, config) {
      for (var i in $scope.projects) {
        if ($scope.projects[i].key == data.key) {
          $scope.projects[i] = data;
          break;
        }
      }
      DoSerial
      .then($scope._list_files)
      .then(function() {
        $scope._select_a_file();
      });
    });
  };

  $scope.prompt_reset_project = function() {
    var title = 'Confirm project reset';
    var msg = 'Are you sure you want to reset project "' +
              $scope.project.name +
              '"?';
    var okButtonText = 'RESET PROJECT';
    var okButtonClass = 'btn btn-danger';
    var callback = function() {
      $scope.reset_project();
    }

    ConfirmDialog(title, msg, okButtonText, okButtonClass, callback);
  };

  $scope.download_project = function() {
    var project_id = $scope.namespace();
    $window.location = '/playground/p/' + encodeURI(project_id) + '/download';
  }

  $scope.prompt_download_project = function() {
    var title = 'Confirm project download';
    var msg = 'Are you sure you want to download project "' +
              $scope.project.name +
              '"?';
    var okButtonText = 'DOWNLOAD PROJECT';
    var okButtonClass = 'btn btn-primary';
    var callback = function() {
      $scope.download_project();
    }

    ConfirmDialog(title, msg, okButtonText, okButtonClass, callback);
  };

  $scope.$watch('selected_path', function(newpath, oldpath) {
    if (!newpath) {
      return;
    }
    if ($scope.current_file != $scope.files[newpath]) {
      $scope.select_file($scope.files[newpath]);
    }
  });

  $scope.$watch('current_file', function(newfile, oldfile) {
    if (!newfile) {
      return;
    }
    if ($scope.selected_path != newfile.path) {
      $scope.selected_path = newfile.path;
    }
  });

}

redpajama_set_name: RedPajamaGithub


The Napa 2 Drawer Locking Lateral File with Traditional Case Moulding Details by Aspenhome at Walker's Furniture in the Spokane, Kennewick, Tri-Cities, Wenatchee, Coeur D'Alene, Yakima, Walla Walla, Umatilla, Moses Lake area. Product availability may vary. Contact us for the most current availability on this product.
The Napa collection is a great option if you are looking for Traditional furniture in the Spokane, Kennewick, Tri-Cities, Wenatchee, Coeur D'Alene, Yakima, Walla Walla, Umatilla, Moses Lake area.
Browse other items in the Napa collection from Walker's Furniture in the Spokane, Kennewick, Tri-Cities, Wenatchee, Coeur D'Alene, Yakima, Walla Walla, Umatilla, Moses Lake area.


Payday Loans in Anaheim (Orange County) CA - How to Get a Payday Loan in Anaheim?
By the way, if you have a bad credit history, but need a payday loan in Anaheim? Do not be nervous, we can approve borrowers with bad credit history.


text:
CFCs contribute only a fraction of global warming
Select a level... Basic Intermediate Advanced
Models and direct observations find that CFCs only contribute a fraction of the warming supplied by other greenhouse gases.
It's CFCs
"The observed data show that CFCs conspiring with cosmic rays most likely caused both the Antarctic ozone hole and global warming... The total amount of CFCs, ozone-depleting molecules that are well-known greenhouse gases, has decreased around 2000. Correspondingly, the global surface temperature has also dropped." (Qing-Bin Lu)
A paper Cosmic-ray-driven electron-induced reactions of halogenated molecules adsorbed on ice surfaces: Implications for atmospheric ozone depletion (Lu 2009) and also Lu (2013) examines the link between CFCs, cosmic rays and global warming. The bulk of the paper concentrates on the link between cosmic rays and depletion of ozone in the Arctic and Antarctic regions. This is interesting work that warrants a closer look (perhaps the subject of a future post) and the role of cosmic rays on climate are address elsewhere. However, the strongest statement is found towards the end of the 2009 paper, stating that "these data strongly indicate that global temperature has been dominantly controlled by the level of CFCs, modulated by the cosmic ray-driven ozone depletion over the past century." Lu is saying that the increased greenhouse effect from CFCs is the main contributor to global warming in recent decades.
Lu's hypothesis was disproven very simply by Nuccitelli et al. (2014). Lu argues that the radiative forcing (global energy imbalance) from CFCs matches global surface temperatures better than that from CO2 over the past decade. This is because as a result of the Montreal Protocol, CFC emissions (and emissions of hydrofluorocarbons, which replaced CFCs) have been flat over the past decade, and global surface air temperatures have also been essentially flat during that short timeframe, while CO2 emissions have continued to rise.
However, a global energy imbalance doesn't just impact surface temperatures. In fact, only about 2% of global warming is used in heating the atmosphere, while about 90% heats the oceans. Over the past decade, ocean and overall global heating have continued to rise rapidly, accumulating the equivalent of about 4 Hiroshima atomic bomb detonations per second (Figure 1).
Figure 1: Land, atmosphere, and ice heating (red), 0-700 meter OHC increase (light blue), 700-2,000 meter OHC increase (dark blue). From Nuccitelli et al. (2012).
So while CFCs might match surface temperature changes better than CO2 emissions over the past decade, CO2 emissions better match the relevant metric – overall global heat accumulation. Since a global energy imbalance influences global heat content and not just surface temperatures, this by itself is sufficient to falsify Lu's hypothesis.
The IPCC AR4 estimate that the radiative forcing from CFCs is 0.33 W/m². This is about 13% of the total radiative forcing from increased greenhouse gases (with carbon dioxide being the main contributor). However, Lu dismisses this value, arguing that CFC radiative forcing is calculated from climate models and not from direct observations. However, this argument is based on curve fitting and has no physical basis.
The physics of how CFCs might impose such a strong radiative forcing are not addressed. Lu mentions that the radiative forcing from CFCs haven't been directly measured, then moves onto statistical correlations. In fact, the greenhouse effect from CFCs have been quantified from surface observations of the infrared radiation spectrum (Evans 2006). The observed results are broadly consistent with model predictions of greenhouse forcing (although observations show slightly higher forcing than model results). The proportion of CFC forcing compared to total greenhouse forcing is still around 14%, a close match to the IPCC estimate of 13%.
Figure 2: Spectrum of the greenhouse radiation measured at the surface. Greenhouse effect from water vapor is filtered out, showing the contributions of other greenhouse gases (Evans 2006).
So we see that CFCs play only a small part in driving global temperatures. Unfortunately, this means that the recent drop in CFC levels will only have a small impact on global temperatures (if only it could be that easy). Of more concern is the increasing radiative forcing from CO2. The infrared spectrum analysis in Evans 2006 measures the extra heat trapped by rising carbon dioxide, finding a CO2 radiative forcing of 2.1 W/m² (again slightly higher than model predictions). This begs the question to those that argue that CFC (or any other mechanism) is meant to be causing global warming. If so, what's happening to all the heat trapped by CO2?
Last updated on 14 April 2014 by dana1981. View Archives
Comments 1 to 34:
muoncounter at 02:28 AM on 19 December, 2010
Lu 2009, full version in pdf, postulated that ozone loss is driven by that other catch-all of CO2 deniers, the much-maligned cosmic rays. Here's their prediction: The intensity of cosmic rays is still peaking in 2009, so we should expect to observe one of the deepest ozone holes over the spring Antarctica in 2009-2010. The data for the Antarctic ozone hole are available here. Sept 2009 had a max hole area of 24 million km^2, smaller than nearly every prior year back to 1992. Sept 2010 was 22.2 million km^2. The ozone hole is shrinking during peak cosmic ray intensity? Ooops. That their mechanism turned out to be incorrect makes further predictions suspect: The CRE-driven ozone depletion is expected to decrease after 2010 due to the CR cycles, but the EESC will keep decreasing ... . If the above observation is confirmed, then we expect to observe a continued decrease in global surface temperature - 'global cooling'. That is, global warming observed in the late 20th century may be reversed with the coming decades. Indeed, global cooling may have started since 2002 ... This is supposed to be credible?
GreenCooling at 15:39 PM on 15 February, 2012
Sorry to discover this one a little late in the piece, I fully concur that it is incorrect to blame AGW entirely on CFCs, but I do think the contribution of the Montreal Protocol to reducing climate change is under recognised - both in terms of the abatement achieved to date by phasing out consumption of CFCs, and what it could yet do by financing recovery of ozone depleting CFCs and HCFCs, and by expanding its scope to address rapidly increasing HFC emissions. The best paper explaining this in the literature is Velders et al (2009) and briefing papers by the Environmental Investigation Agency are well worth reading in order to track this issue. The importance of looking at the 20 year Global Warming Potential values of HFCs is highlighted in this previously unpublished graph, which has recently been included in a Greenpeace International paper here. As the experience of getting rid of CFCs shows, this is a relatively easy task compared with abating CO2 emissions. While this remains of paramount importance, we are about to make the problem a whole lot worse if we continue to fail to take swift and serious action to prevent the projected volume of HFC emissions from occurring.
ajbmilne at 06:29 AM on 30 March, 2012
Lu has published another related article: http://journalofcosmology.com/QingBinLu.pdf Any comments on it, or on his claim that CO2 traces and temperature traces don't match for the years 1850-1930 or for his reported CO2 concentrations of 285-310 ppm? It seems to be in contradiction to other data on this site: http://www.skepticalscience.com/pics/Comparison.png Forgive me if these are questions that have been answered before, I'm new to the site. If they have been answered I'd appreciate being pointed to them.
EOttawa at 06:55 AM on 31 May, 2013
And another paper by the same authour, just published in International Journal of Modern Physics B
Cosmic-Ray-Driven Reaction and Greenhouse Effect of Halogenated Molecules: Culprits for Atmospheric Ozone Depletion and Global Climate Change
http://www.worldscientific.com/doi/abs/10.1142/S0217979213500732
https://uwaterloo.ca/news/news/global-warming-caused-cfcs-not-carbon-dioxide-study-says
KR at 07:15 AM on 31 May, 2013
Ah, yes, the International Journal of Modern Physics B, the journal that is supposedly focused on condensed matter, statistical, and applied physics, the journal that published the amazingly wrong Gerlich & Tscheuschner paper.
A new paper in which the author claims that CO2 forcing is saturated, that the log relationship between concentration and forcing for CO2 no longer holds. Oh my...
I would suggest taking climate papers from IJMPB with a large grain (perhaps a block?) of salt.
DMCarey at 11:04 AM on 1 June, 2013
His newest paper is making the rounds quickly today it seems. Many thanks John, this argument certainly helped the debunking process
Tom Dayton at 23:18 PM on 2 June, 2013
Eli Rabett has commented on the "new" (i.e., recycled) 2013 Lu paper claiming CFCs are responsible for everything.
[1and0nly] at 16:42 PM on 3 June, 2013
An updated rebuttal of the CFC theory needs to be on the homepage ASAP. Some mainstream media are throwing the ridiculous claims made in Lu's new study around as if they were facts (notably The Australian).
David Karoly pointed out that the HFC replacements for CFCs have just as much greenhouse effect as CFCs, so the reduction in CFCs that Lu insists has been and will cause cooling, is being offset by HFCs. So Lu's assertion is just plain wrong for that reason, too.
GreenCooling at 13:46 PM on 4 June, 2013
As much as it pains me to correct such an eminent and respected scientist, I must humbly submit that Prof David Karoly is mistaken in saying on the ABC radio "AM" story cited by Tom @9 that "The replacement chemicals for chlorofluorocarbons are hydrofluorocarbons, which are used as refrigerants, have already got as large a greenhouse influence as the reductions in the chlorofluorocarbons.
As established by Velders et. al. Science (2012) "Preserving Montreal Protocol Climate Benefits by Limiting HFCs" (and reinforced by the 2011 UNEP Synthesis Report "HFCs: A Critical Link in Protecting the Climate and the Ozone Layer" ) the climate benefit inadvertantly acheived by phasing out CFCs to protect the ozone layer has been significant, yet is likely to be lost in coming decades if we fail to take effective action to prevent rapidly rising emissions of HFCs. The HFCs horses have not yet all bolted, but it is time to shut the gate.
Velders et.al. (2012) put it like this: "Total avoided net annual ODS emissions are esti- mated to be equivalent to about 10 Gt CO2/ year in 2010, which is about five times the annual reduction target of the Kyoto Proto- col for 2008–2012 (5). This climate benefit of the Montreal Protocol may be reduced or lost completely in the future if emissions of ODS substitutes with high GWPs, such as long- lived HFCs, continue to increase."
Preserving the climate benefits of the Montreal Protocol by urgently phasing out HFCs with a mix of policy tools including strict regulation such as end use bans, carbon pricing levies and inclusion in the Montreal Protocol to drive concerted global action is the largest, quickest, cheapest and most effective tool in the emissions abatement policy shed. But as atmospheric HFC concentrations continue to rise, time is running out, and greater attention to the non-CO2 forcers is required now.
Natural refrigerants such as ammonia, carbon dioxide and hydrocarbons stand ready to provide the needed solutions to meet our cooling needs, and the chemical companies that caused the CFC, HCFC and HFC problems have a new range of patented and attractively branded low-GWP 'HFO's' they are pushing to see adopted by anyone who still thinks they deserve to continue to be rewarded for doing so.
Prof Karoly is completely correct in saying "in fact, the global warming influence of these chemicals, the hydrofluorocarbons, is already growing more rapidly than the reductions in chlorofluorocarbons" (although he could have added that hydrochlorofluorocarbons, HCFCs, are also CFC replacements and are still rapidly increasing, in spite of being subject to a Montreal Protocol driven phaseout), but there is still more we could do to increase the reductions of CFCs & HCFCs by recovering them from the pipework and foams of our dead fridges and airconditioners respectively.
Lamentably few scientists understand the climate threat posed by HFCs, and fewer still are prepared to speak out about the need to urgently avoid their use and to rapidly embrace the readily available environmentally benign rerigerant solutions.
If we are to avoid the projected greenhouse impacts of HFCs wiping out those acheived by the CFC phaseout, it would be very helpful if Prof Karoly and others of similar standing were able to assist in clarifying the imperative of acting now to rapidly reduce the use and emissions of Ozone Depleting Substances and Synthetic Greenhouse Gases.
While Lu is completely wrong about CFCs, the debate now required is a good opportunity to correct the widely held yet mistaken notion that the F-gas problem is fixed.
Further to the above @10, I hope the following graphs may be of interest:
These Velders figures illustrate well the 'world avoided' by the Montreal Protocol CFC phase out (and the accelerated HCFC phaseout agreed in 2007), and the HFC projections by volume and CO2-e impact. While not at this stage likely, reducing HFC emissions well below the "low" projection is certainly possible with available technology and a lot more public awareness and political will.
This figure from the 2011 UNEP Synthesis Report "HFCs: A Critical Link in Protecting the Climate and the Ozone Layer" provides a good overview of where we've come from and where the relevant literature indicates we are headed, absent a more informed policy debate and resultant policy and market responses.
GreenCooling at 11:40 AM on 5 June, 2013
Apologies, the figure above with 3 graphs was adapted from Velders et.al. (2007, 2009), but it is actually figure 5-6 from the Scientific Assessment of Ozone Depletion: 2010, a collaboration of WMO, UNEP, NOAA, NASA & EC, see page 5.29 for associated explanation.
David Lewis at 04:59 AM on 6 June, 2013
GreenCooling: Mario Molina et.al. noted in 2009 in Reducing abrupt climate change risk using the Montreal Protocol and other regulatory actions to complement cuts in CO2 emissions which was published in pnas that:
"The Montreal Protocol is widely considered the most successful environmental treaty, phasing out almost 100 ozone-depleting chemicals by 97% and placing the ozone layer on the path to recovery by mid-century (18). It also is the most successful climate treaty to date..."
chanut.th at 18:53 PM on 22 March, 2018
CFC is a substance that is widely used around the world. Used as a component in various products such as refrigerators, air conditioners. And products that look like spray, although CFC will be a tremendous benefit to human life. Non-degradable substances in the atmosphere. It will float up to the stratosphere and be altered by the sun's rays. Become a chlorine particle and destroy ozone, which protects the Earth from heat.
The graph in the article shows the ocean heat at CFC. It was released in the city, why heat energy causes the ocean to heat up, as CFCs are released over urban areas.
michael sweet at 02:26 AM on 23 March, 2018
Chanut.th
CFC's were banned by the Montreal accord. They are no longer used. HCFC's ad other less damaging substances are currently in use. Apparently HCFC's are also being phased out as they also damage the ozone layer. The issue is the ozone layer, which protects the Earth from damaging UV light, not protecting the Earth from heat.
After CFC's and other gasses are released into the atmosphere in the city they are mixed into the entire atmosphere by wind. In a relatively short time the entire atmosphere is mixed together. The heat is absorbed relatively uniformly over the entire Earth Since most of the Earth is covered by ocean, most of the energy absorbed goes into the ocean.
John Hartz at 07:32 AM on 24 January, 2020
Recommended supplemnental reading:
Closing the Ozone Hole Helped Slow Arctic Warming by Chelsea Harvey, E&E News/Scientific American, Jan 22, 2020
EGS at 06:46 AM on 6 March, 2020
Very recent work led by Lorenzo Polvani and an international team of scientists just published in January 2020 by Nature Climate Change (https://www.nature.com/articles/s41558-019-0677-4)
argues that large amounts of global and arctic warming are actually due to ozone depleting chemicals (CFCs, HFCs, other halons, and nitrous oxide [N20]), no less than 1/2 of all warming in the arctic and no less than 1/3 of all global warming between 1955 and 2005. These ozone depleting chemicals are trace gasses measured in parts per billion but have global warming potentials 100s to many 1000s of times greater than CO2. CFC-11 and CFC-12 are 19,000 and 23,000 times more radiatively efficient than CO2 per molecule. The global warming impact of methane has apparently also been underestimated, with one new study by Hmiel et al. in Nature arguing that anthropogenic CH4 releases have been 25-40% greater then previously thought (https://www.nature.com/articles/s41586-020-1991-8). Another study by Thompson et al. in Nature Climate Change from November 2019 showed that N20 emissions have been rising far more than the IPCC had assumed since 2009 (by an estimated factor of 2.3!) (https://www.nature.com/articles/s41558-019-0613-7). According to the US EPA, the global warming potential of N20 is 265-298 times greater than CO2 over a 100 year timescale (https://www.epa.gov/ghgemissions/understanding-global-warming-potentials). Tropospheric ozone (O3) is both a potent direct greenhouse gas and plays a role in the lifetime and effectiveness of other greenhouse gasses. According to research by Jim Hansen and others published in the Journal of Geophysical Research (2006), tropospheric O3 is estimated to have caused no less than 1/3 to 1/2 of the observed recent trends in arctic warming in the winter and spring, when O3 is easily transported to polar regions from lower latitude urban centers https://agupubs.onlinelibrary.wiley.com/doi/10.1029/2005JD006348. Tropospheric O3's direct cumulative radiative forcing when combined with fine particulates like black carbon is believed to possibly outweigh that of all the CO2 released since the beginning of the industrial era https://www.pnas.org/content/pnas/early/2010/02/02/0906548107.full.pdf. Sulphur hexaflouride (SF6) is perhaps the most potent anthropogenic greenhouse gas, and its emissions have been rising rapidly from use as an electrical insulator. Its 100 year global warming potential per molecule is estimated at 23,000 times that of C02. Its atmospheric abundance is low at 8.60 parts per trillion volume, but it is rising at a linear rate by 0.33 pptv per year and can persist in the environment for more than 1000 years. https://www.atmos-chem-phys.net/17/883/2017/acp-17-883-2017.pdf
Would that not be evidence that climate sensitivity to CO2 must be much lower than previously modeled? These other GHGs would presumably have the same water vapor amplification feedbacks as CO2 (as non-condensing atmospheric gasses) and produce the expected lower adiabatic lapse rates of warmer water vapor, would they not? Or does water vapor resonate more readily with the discrete wavelengths of infrared radiation emitted by vibrating CO2 molecules? Are those wavebands already saturated so that any additional CO2 emissions can't add much more radiative heat? In other words, if CO2 is as radiatively powerful as modeled, there should have been dramatically more global warming since the onset of industrialization, especially since the 1950s when these other GHGs really began to be emitted on a very large scale.
In my previous post I failed to mention HFCs (a.k.a. HCFCs). They replaced CFCs with the Montreal Protocol.
The 100 year global warming potential of HCFCs (C5H2F10) was recently re-estimated to be somewhat lower than previously thought, but at 1,410 it is still over 1000 times greater per molecule than C02. https://www.sciencedirect.com/science/article/abs/pii/S0022285217301455. According to NOAA, these chemicals have been accumulating in the atmosphere at a rapid rate since 1990, with HCFC-22 and HCFC-134a above 250 and 100 pptv respectively in 2015 and increasing linearly. https://www.esrl.noaa.gov/gmd/hats/about/hfc.html
michael sweet at 08:20 AM on 6 March, 2020
EGS:
From the abstract of the paper you cited:
"While the dominant role of carbon dioxide is undisputed"
The IPCC knows that there are a number of other greenhouse gasses besides CO2. Modelers have these gasses in the models. It appears to me that Polvani et al are trying to quantitate more accurately how much warming is due to gasses besides CO2. This is interesting but does not change the basic science of AGW.
EGS at 12:25 PM on 6 March, 2020
1/2 of all arctic warming between 1955 and 2005 due to CFCs & N20?
1/3 of all global warming between 1955 and 2005 due to CFCs & N20?
Nearly all the recent decline in arctic sea ice due to CFCs and tropospheric O3?
Tropospheric O3 and black carbon with as much impact on global warming as all the CO2 emitted since c. 1750?
michael sweet at 15:03 PM on 6 March, 2020
EGS,
You appear to be arguing that Climate Science has severe flaws in calculations based on this paper. The paper does not make that claim. Your claim that "Nearly all the recent decline in arctic sea ice due to CFCs and tropospheric O3?" is not what the paper says. In fact the abstract says:
"when ODS are kept fixed, forced Arctic surface warming and forced sea-ice loss are only half as large as when ODS are allowed to increase" my emphasis.
The response of water vapor to added greenhouse warming from CFC's would be the same as the response to CO2. Your claims that the effect of CO2 are overestimated by the IPCC are not in the abstract of the paper, you appear to have made them up yourself.
Much of the difference between the warming we have seen since 1989 and what Hansen modeled is due to the fact that Hansen modeled CFCs increase as more than they did. The Montreal Protocol resulted in lower increases of CFCs than previously expected.
Only climate deniers claim that only CO2 affects global climate change. Climate scientists know that other gasses (including black carbon) also affect warming and the total effect of human released gasses is much greater than the effect of 415 ppm CO2 alone. The linked press release claims 82% of the increase in greenhouse gasses from 2007-2017 is from CO2. CFC's were released less in that decade than before because of the Montreal protocol.
A free copy of the paper you cite is here. It states
"in this paper we focus specifically on the period 1955–2005,
during which ODS concentrations grew rapidly. Over that period
the RF from ODS is estimated16 to be 0.31 Wm–2, which amounts
to nearly one-third of the RF from CO2 (1.02Wm–2), making ODS,
collectively, the second most important GHG in the latter half of
the twentieth century, as seen in Fig. 1. These facts are well established7,17 and the important contribution of ODS to global warming has previously been noted18,19" my emphasis.
It appears to me that your claims are not supported by your citation.
Eclectic at 16:03 PM on 6 March, 2020
EGS :-
Being far from expert in this area, I should be grateful if you would explain the significance or importance of that recent study by Polvani et al.
The authors are somewhat vague in their claims, and request confirmatory studies. AFAICT their models are based on experimental infrared spectra & calculated instantaneous radiative forcings. They say that their results suggest that ODS [Ozone-Depleting Substances] provide about 20% of the GHG RF forcing over the Arctic. (This fits with past information provided on the NASA website.) Yet they state that "the precise value of ODS efficacy remains to be robustly quantified."
By area, the polar regions are only a small portion of total planetary surface, and they have even lesser importance when given a radiative weighting.
There may be some misinterpretation of the relative radiative importance of the halocarbons, since (like with the comparative weightings of CO2 and H2O vapor) it is difficult to un-tease the overlapping absorptive spectra of other GHGs.
Eclectic,
Are you claiming that the degree of northern hemisphere ice albedo is a trivial amplification feedback in anthropogenic radiative forcing?
[DB] Your previous 2 comments were removed as being off-topic and Gish Gallops of rambling assertions lacking foundation. Just throwing out a bunch of poorly-understood and misrepresented papers does not give you any credence in a science-based forum such as this. Please stick to the topic of this post. Other topics are covered by other posts here (literally thousands exist). Use the Search function to find the most relevant post and read it and its comments and this site's CommentsPolicy before posting further.
Could ozone depleting chemicals and the other GHGs (with a large revision downward of CO2 radiative forcing and amplification feedbacks?) explain a modestly warming upper troposphere, higher tropopause, and a cooling stratosphere that are among the markers of anthropogenic climate change? Wouldn't that also align with the strong empirical evidence of very little global warming since the preindustrial era until 1950 that then really accelerated after the 1950s and 1960s as CFCs, HFCs, halons, and SF6 emissions skyrocketed from their industrial use as refrigerants, solvents, propellants, and electrical insulating gasses? The spike in anthropogenic warming from N20 and CH4 could likewise be timed with the massive intensification of agriculture enabled by large-scale application of nitrate fertilizer and changes in land use patterns (deforestation) accompanying the green revolution since the 1970s. This was a time that was also accompanied by dramatically increased diesel tractor and diesel vehicle use, skyrocketing bunker fuel emissions from the expansion of container shipping, and rising heating oil emissions from a switch from coal to oil, which could account for much of the rest of the increase in N20, much of the tropospheric O3, and a large part of the fine particulate emissions increases. The timing of the acceleration of warming would also strongly imply a weaker climate sensitivity to C02 forcing and a greater cumulative forcing of these other greenhouse gasses. It was, after all, in the 1980s and 1990s that global warming really accelerated, not earlier. Would that not also align well with the much stronger warming over the poles (mostly accounted for by CFCs, HFCs, N20, tropospheric O3), strong stratospheric cooling from the depletion of/hole in the polar stratospheric 03 layer, and the much weaker than expected tropical upper tropospheric temperature anomoly and the weaker than expected deep ocean warming?
[DB] In the early 20th century human activities caused about one-third of the observed warming and most of the rest was due to low volcanic activity. Since about 1950 it's all humans and their activities.
https://journals.ametsoc.org/doi/10.1175/JCLI-D-18-0555.1
https://onlinelibrary.wiley.com/doi/full/10.1002/wcc.522
Off-topic and sloganeering snipped. Arguments pertaining to Climate Sensitivity is Low must be placed on that thread, not here.
Poorly understood and misrepresented papers? Which papers have I not understood? The paper by Unger et al. in the proceedings of the US National Academy of Sciences (citing work by the Fourth Assessment working group of the IPCC) that tropospheric O3's direct cumulative radiative forcing when combined with fine particulates like black carbon may outweigh that of all the CO2 released since the beginning of the industrial era https://www.pnas.org/content/pnas/early/2010/02/02/0906548107.full.pdf.
[DB] Off-topic and moderation complaints snipped. You are essentially arguing one of the many subsets of arguments that "It's not us". Pick one of the most-appropriate and repost this line of reasoning there.
Please note that posting comments here at SkS is a privilege, not a right. This privilege can be rescinded if the posting individual treats adherence to the Comments Policy as optional, rather than the mandatory condition of participating in this online forum. One of the most important of these precepts is to stay on-topic.
Please take the time to review the policy and ensure future comments are in full compliance with it. Thanks for your understanding and compliance in this matter.
What the science does not say:
"CFCs contribute to global warming at a small level."
[DB] Per the AR5, Halocarbon (which includes CFCs) radiative forcing (RF) is small relative to that of CO2 RF.
This is clearly outdated. Polvani et al. showed that ozone depleting chemicals alone account for 1/3 of all anthropogenic global warming between 1955-2005. The papers I cited above all show that anthropogenic, CH4, N20 O3, and black carbon contribute more than previously thought. I don't understand why these far more potent anthropogenic greenhouse gasses/particles get relegated to relative insignificance, not least since CFC, HFC, SF6, tropospheric O3, N02, and black carbon have unambiguous anthropogenic sources. Increased ppm of C02 is also anthropogenic, but you can't impute the kind of radiative forcing and amplification feedbacks to it and not apply those to these even more potent greenhouse gasses, otherwise there would have been far more warming than we have been able to measure. Something has to give up some radiative forcing in oder to get anything like the warming we have been able to measure. The underappreciation of CFCs and other GHGs is likely why climate models have been running hot. Michael Mann is himself aware that there are problems with the climate forcing theories. He coauthored a paper in Nature Geophysics in 2017 (https://www.nature.com/articles/ngeo2973) that argued that the failure of climate models to align with the measured level of tropospheric warming since 2000 is unlikely to have been caused by natural variability and model error in climate sensitivity but rather in "systematic deficiencies in some of the post-2000 external forcings used in the model simulations."
[DB] Research shows that climate models are getting future projections right, meaning that the physics of the models are well-validated by subsequent observations.
Sloganeering snipped.
MA Rodger at 02:52 AM on 7 March, 2020
Do note that the paper discussed above Polvani et al (2020) 'Substantial twentieth-century Arctic warming caused by ozone-depleting substances' has been the subject of some corrections. And for the record, I would answer the question of EGS @17 "Would that not be evidence that climate sensitivity to CO2 must be much lower than previously modeled?" with a flat "No!"Given the comment thread since, I'm not sure that any explanation would be helpful.
The total anthropogenic radiative focing bars at the bottom of the chart align almost perfectly with what economic historians know about diesel and heating oil emissions, nitrate fertilizer use, methane emissions from farming, deforestation and stock rearing, and industrial halocarbon use.
[DB] Please take discussions of animal agriculture to this thread.
EGS @29,
You say "The papers I cited above all show that anthropogenic, CH4, N20 O3, and black carbon contribute more than previously thought." I thnk you will find that is incorrect.
Consider you CH4 reference cited @17, Hmiel et al (2020) 'Preindustrial 14CH4 indicates greater anthropogenic fossil CH4 emissions'.This paper argues that FF emissions of CH4 were greater than previously thought. The atmospheric burden of CH4 is not challenged and it is the atmspheric burden that determines the climate forcing, not the source of the emissions that increase that atmospheric burden.
MA Roger,
The atmospheric burden of CH4 has increased. According to NOAA the CH4 mole fraction has increased from 1650 ppb to nearly 1900 ppb between 1980 and 2020. It stabilized around 2000-2005, but has been increasing at a linear rate since then https://www.esrl.noaa.gov/gmd/ccgg/trends_ch4/.
Are you disputing that the increased atmospheric concentration of CH4 is not from livestock rearing, farming, and deforestation? And while FF emissions of CH4 are technically not anthropogenic, oil and gas drilling and hard rock mining are releasing it into the atmosphere.
[DB] Off-topic snipped.
Please note that posting comments here at SkS is a privilege, not a right. This privilege can and will be rescinded if the posting individual continues to treat adherence to the Comments Policy as optional, rather than the mandatory condition of participating in this online forum.
Moderating this site is a tiresome chore, particularly when commentators repeatedly submit off-topic posts or insist on repeating points already refuted. We really appreciate people's cooperation in abiding by the Comments Policy, which is largely responsible for the quality of this site.
Finally, please understand that moderation policies are not open for discussion. If you find yourself incapable of abiding by these common set of rules that everyone else observes, then a change of venues is in the offing.
Eclectic at 05:26 AM on 7 March, 2020
EGS @33 ,
You have a very strange definition of "anthropogenic" if you are not including FF-related emissions of CH4. Please stick with standard English !
The IPCC summary in AR5 (based on approx 2010 info) on CH4 and other drivers, seems quite straightforward and comprehensive. Easy to make a small extrapolation ~ which does not support your radical contention on halocarbons.
The Hmiel et al. (2020) paper is relevant and interesting. (Thanks for that one, MA Rodger.)

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: I need help locating a URL that is on my site map, but that I can't find in my Wordpress dashboard I hired a developer to implement the LearnDash plugin on my Wordpress site. He wasn't able to finish the project and left my site with several unnecessary pages and plugins. I want to get my site back to the way it was before he installed Learndash. I deactivated several plugins that were associated with learndash: woocommerce, mailchimp, etc. I also unpublished several pages that were associated with registration and courses. My question relates to a few pages that I can't delete. On my page there is a site map that is created automatically by a plugin. On that site map, it lists three pages: "Shop", "Register" and "Premium Course" that I would like to delete. This issue is that I can't find these pages anywhere on the Wordpress dashboard. I have checked posts, pages, projects, and hunted around within the plugins. Is there a way to find where the pages are located so that I can delete them?

A: Keep in mind there's really only a few actual pages in WordPress.  Most URLs are getting redirected to index.php, parsed for the request information, and then processed accordingly. They are mostly posts in the end, which are pulled from the database and displayed according to one or more template files.
The reason that's important is because it means you can't really be sure where a "page" is coming from. It could be a post, a page, a redirect rule, a custom post, etc.
So you're left with digging around a bit. There's not a clean answer I know of.
When you load the page, can you click "Edit" in the admin toolbar?
If it is represented by a WordPress post behind the scenes, then it has a post ID.  Another technique is if you inspect the page and look at the classes added to the main article, you may see a clue as to it's ID, which will help you track it down. Note that not all themes implement the post classes correctly, so you may see nothing at all.
Once you have the ID, you may be able to tell where it's coming from, even if you have to look at the row with that ID in your database (wp_posts).
Its possible those pages do not have actual posts behind them and are being generated by the theme or a plug-in. Do they persist when you deactivate all plugins and change themes? If so, turn them back on one by one until you find the culprit.

A: I had a similar issue with LearnPress plugin. In this case the plugin took over the "courses" slug, even when it already existed, and changed it to "courses-2". Even after uninstalling LearnPress, I was unable to get back the original "courses" slug. (I then resorted to a backup I made before installing LearnPress and in a couple of minutes the issue was history).
In your case it could also be that the "Shop", "Register" and "Premium Course" pages don't actually exist anymore, but their "shop", "register" and "premium-course" slugs do still persist in the database, being thus automatically indexed to the Sitemap.
Don't know if you have a backup of your site previous to the installation of LearnDash. If not, you could either try to remove and cleanup the old slugs manually or via some plugin.
As for the first way, have a quick look at this page. As for the second one, give it a try, for example, to this plugin called "Remove Old Slugs". Good luck!

A: I know this is the last thing you want to do, but you might accomplish this with some plugins.
WP Optimize removes lots of unnecessary data from your database. I would start there first.
If this does not help, I had some luck in the past with Plugins Garbage Collector which cleans the old plugin tables and data.
Make sure these plugins are compatible with your WordPress version before you install them and make sure to back up your database before you attempt any of these.
Hope this helps!

redpajama_set_name: RedPajamaStackExchange


text:
Featherstone W.
WALLACE FEATHERSTONE (1882 – 1917)
18/65 Private Wallace Featherstone, 18th Battalion, Durham Light Infantry was killed in action 1 March 1917 and is buried at Gommecourt British Cemetery No. 2, Hebuterne, France.[1] He was about 34 years old and commemorated on the Etherley War Memorial, the Roll of Honour in St. Cuthbert's Church, Etherley and the Evenwood W.M.C. Memorial Plaque.
Wallace's older brother 14017 Private Jonathan Ralph Featherstone, 10th Battalion, the Durham Light Infantry died of pneumonia 28 February 1917 and is buried in Etaples Military Cemetery, France.
Family Details:
Wallace Featherstone was born 1882 [2] the son of Wallace and Margaret Featherstone. There were at least 8 children:
Jonathan bc.1881 at Morley
Wallace born.1882 at Morley
Jonah bc.1885 at Morley
Herbert bc.1887 at Morley
Grieveson bc.1891 at Morley
Florence bc.1893 at Morley
Bryan bc.1898 at Evenwood
Albert bc.1900 at Lands
In 1901, the family lived at Lands Bank. 41 year old Wallace and 20 year old Jonathan worked as coal miners.[3]
By 1911, the family lived at Rowntree, Morley. Wallace and Margaret had been married for 30 years and he worked as a farmer/coal miner (a hewer). His sons, Wallace, Jonah, Herbert and Grieveson were all coal miners (hewers). Florence aged 18 had no occupation recorded so probably helped her mother at home. Bryan aged 12 and Albert aged 11 would still be at school. The oldest brother Jonathan is not mentioned in the 1911 family details so is assumed to live elsewhere.[4]
Wallace's father died 19 May 1916, his sister Florence 29 May 1916 and his brother Albert died 21 June 1918. Wallace's mother, Margaret died 23 May 1920. At this time the family lived at Cox House Farm, Windmill near Morley.[5]
Wallace's older brother, Jonathan enlisted as Ralph Featherstone and died of pneumonia 28 February 1917, in a military hospital in Etaples, France.[6]
Wallace's younger brother Grieveson served with the ASC Remounts before joining the 5th Buffs. He survived the war.[7]
Military Details:
Wallace Featherstone enlisted at Darlington and joined the 18th Battalion, the Durham Light Infantry being given the regimental number 18/65. The 18th (Service) Battalion of the DLI was formed 10 September 1914 as part of K1, Kitchener's New Army.[8] The Battalion came under the orders of the 93rd Brigade, 31st Division. Others in the 93rd Brigade were:
15th (Service) Battalion (1st Leeds) West Yorkshires (joined June 1915)
16th (Service) Battalion (1st Bradford) West Yorkshires (joined June 1915)
18th (Service) Battalion (2nd Bradford) West Yorkshires (joined June 1915)
93rd Brigade Machine Gun Company (joined May 1916)
93rd Trench Mortar Battery (joined 12 April 1916)
The battalion was stationed at Hartlepool from 16 October 1914 and was the first DLI battalion to come under fire when Hartlepool was bombarded by a German squadron of warships, Derfflinger, Von Der Tann and Blucher. The battalion lost 5 men killed and 11 wounded.[9]
The battalion was the only DLI battalion to see service in the Middle East.
6 December 1914: embarked upon SS Empress of Britain heading for Port Said, Egypt via Gibraltar, Malta and Alexandria arriving 21 December. 18/65 Private Wallace Featherstone entered Egypt 22 December 1915.[10]
5 March 1915: 18/DLI embarked upon SS Ivernia headed for Marseilles, France.[11]
30 March 1916: 18/DLI was in the trenches north-west of Beaumont Hamel in the region of the Somme, north-west France.
The Battle of the Somme 1 July – 18 November 1916: an overview [12]
The Battle of the Somme was viewed as a breakthrough battle, as a means of getting through the formidable German trench lines and into a war of movement and decision. Political considerations and the demands of the French High Command influenced the timing of the battle. They demanded British diversionary action to occupy the German Army to relieve the hard pressed French troops at Verdun, to the south.
General Sir Douglas Haig, appointed Commander-in-Chief in December 1915, was responsible for the overall conduct of British Army operations in France and Belgium. This action was to be the British Army's first major offensive on the Western Front in 1916 and it was entrusted to General Rawlinson's Fourth Army to deliver the resounding victory. The British Army included thousands of citizen volunteers, keen to take part in what was expected to be a great victory.
The main line of assault ran nearly 14 miles from Maricourt in the south to Serre to the north, with a diversionary attack at Gommecourt 2 miles further to the north. The first objective was to establish a new advanced line on the Montauban to Pozieres Ridge.
The first day, 1 July was preceded by a week long artillery bombardment of the German positions. Just prior to zero-hour, the storm of British shells increased and merged with huge mine explosions to herald the infantry attack. At 7.30am on a clear midsummer's morning the British Infantry emerged from their trenches and advanced in extended lines at a slow steady pace over the grassy expanse of a No Man's Land. They were met with a hail of machine gun fire and rifle fire from the surviving German defenders. Accurate German artillery barrages smashed into the infantry in No Man's Land and the crowded assembly trenches – the British suffered enormous casualties:
Officers killed 993
Other Ranks killed: 18,247
Total Killed: 19,240
Total casualties (killed, wounded and missing): 57,470
In popular imagination, the Battle of the Somme has become a byword for military disaster. In the calamitous opening 24 hours the British Army suffered its highest number of casualties in a single day. The loss of great numbers of men from the same towns and villages had a profound impact on those at home. The first day was an abject failure and the following weeks and months of conflict assumed the nature of wearing-down warfare, a war of attrition, by the end of which both the attackers and defenders were totally exhausted.
The Battle of the Somme can be broken down into 12 offensive operations:
Albert: 1 – 13 July
Bazantin Ridge: 14 – 17 July
Delville Wood: 15 July – 13 September
Pozieres Ridge: 15 July – 3 September
Guillemont: 23 July – 3 September
Ginchy: 9 September
Flers-Courcelette: 15 – 22 September
Morval: 25 – 28 September
Thiepval: 25 – 28 September
Le Transloy: 1 – 18 October
Ancre Heights: 1 October – 11 November
Ancre: 13 – 18 November
Adverse weather conditions i.e. the autumn rains and early winter sleet and snow turned the battlefield into morass of mud. Such intolerable physical conditions helped to bring to an end Allied offensive operations after four and a half months of slaughter. The fighting brought no significant breakthrough. Territorial gain was a strip of land approximately 20 miles wide by 6 miles deep, at enormous cost. British and Commonwealth forces were calculated to have 419,654 casualties (dead, wounded and missing) of which some 131,000 were dead. French casualties amounted to 204,253. German casualties were estimated between 450,000 to 600,000. In the spring of 1917, the German forces fell back to their newly prepared defences, the Hindenburg Line, and there were no further significant engagements in the Somme sector until the Germans mounted their major offensive in March 1918.
1 July 1916: 18/DLI in action [13]
The 31st Division took part in the Battle of Albert in the assault on Serre which was the first phase of the Battle of the Somme. The Division suffered very high casualties and accordingly was withdrawn for several months to return for the tenth phase, the Battle of the Ancre in mid November.
1 July: 18/DLI "D" Company formed part of the assault troops. The other 3 battalions were in reserve, in Maitland Trench.
"At twenty minutes past seven was heard the explosion of the great mine at Beaumont Hamel and the British rate of fire increased. But now the German artillery opened in earnest upon our trenches, dealing death and chaos among the infantry already climbing out to form for the assault. In the ten minutes which followed the fate of the day was decided. Though every effort was made to advance, few men lived to pass beyond the hostile curtain of fire which barred the way across No Man's Land. There were some who struggled on and reached the German parapet, now alive with machine-gunners and riflemen; we know too, that a gallant handful of D company reached Pendant Copse, a mile inside the German front." [14]
At 9.30 the 3 companies of the 18th were ordered forward to Monk Trench – into German shell fire then they were distributed into Flag, Maitland and Monk Trenches. Wounded and the dead were removed under shell fire. The front line no longer existed as a fighting trench, communication trenches were nearly obliterated. All afternoon and evening, the work of reorganisation continued under constant Germen shell fire. It was known that some infantrymen had entered Serre but all thoughts of a fresh advance were abandoned. The 18th took over the front line on alert for any counter attack. Firing died down during the evening and the night was quiet.[15]
2 July: the Battalion was ordered to hold the front line with one company during the day and double the strength at night. The remainder of the battalion occupied South Monk Trench. British gunners fired upon the enemy to mask an advance further south and this brought about retaliation on "C" Company who lost 2 officers and 10 men. At 8pm North Monk Trench was "drenched" with tear shells. "C" Company set out to rescue the wounded. 40 were brought in. The dead were buried.
3 July: In the early hours, a bombardment of high explosive and tear shells rained on the British trenches.
"The 18th, at full fighting strength when the battle began, now numbered, with reinforcements only 14 officers and 357 men…Twelve officers were killed or wounded and 58% of the rank and file, but this sacrifice was adjudged to have served its purpose." [16]
4 July: During the night, the remains of the battalion were relieved by the Worcesters
5 July: 5am behind the lines at Louvencourt. The battalion then went to La Fosse for training then back in the line.
27 July: Neuve Chapelle: fierce German bombardment and the enemy entered D Company's lines but were repelled. Losses of the 18th amounted to 79 from shell fire.
4 August: withdrew to La Fosse.
The next "tour" was near Festhubert but this was generally a quiet sector then to Neuve Chapelle.
21 August: Givenchy: many men worked with the tunnellers.
5 October: Bethune, la Perriere
9 October: Orville for training.
21 October: Sailly-au-Bois: took over support positions carrying out wiring and digging under heavy fire, then to Hebuterne and under heavy bombardment.
End of October – Rossignol Farm – billets, working parties and training for raids. At this time no place on the front was worse than the Hebuterne sector – all roads through the village and the trenches were kept under almost ceaseless fire.
"The weather could not have been worse and the troops lived and worked under the most miserable conditions imaginable. Small wonder that the 18th in common with other units evacuated many sick men." [17]
The Battle of the Somme may have been abandoned but trench warfare continued unabated.
16 December: carried out a raid and returned with a few men slightly wounded.
18 December: Famechon: rest over Christmas.
"The 18th had another tour in the line – where they found the trenches worse than ever – before going back for a rest and training, first at Frohen-le-Petit and Outrebois, west of Doullens and then at Thieves and Marieux. On January 22nd the Durhams moved to Heuzecourt, where training and recreation continued in bright frosty weather. It was nearly a month later when they came back into support positions in the Hebuterne sector. The enemy was known to be retiring and when the 18th occupied front trenches on February 25th fires were seen behind the lines." [18]
26 February: 18/DLI took over from the 7/Loyal North Lancs.of the 19th Division. The German artillery pounded the British lines and No Man' Land. A reconnoitre by 2 platoons took place and it was discovered that the enemy lines were deserted.
27 February: The area was occupied then handed over to the 4/Leicesters. By 7.30 the whole Moltke Graben was occupied from Crucifix Corner to Gommecourt Cemetery.
"The battalion now commenced attacking the FIRST GRADE STELLUNG, B Company sent a platoon up the ROM GRABEN on the left but a strong German bombing party assisted by 2 machine guns strenuously resisted all attempts by the Durhams to force their way into the main positions. Two enemy communication trenches on the right were practically obliterated and 2 platoons that tried to use them got lost in the darkness. The battalion kept trying all night and most of 1st March to enter the enemy position but that afternoon a patrol from D Company reported that FIRST GARDE STELLUNG was strongly held by many Germans armed with several machine guns. It wasn't until 0200 hours on the 3rd March when 18/West Yorks got into ROSSIGNOL WOOD that the Durhams were able to make progress." [19]
4 March: The action continued into the morning 4 March. The battalion was relieved by the 12/York & Lancaster Regiment then made their way to Rossignol Farm for a well earned rest. It is believed that Private Wallace Featherstone died 1 March 1917.
Losses for the battalion were reported as:
"Casualties amounted to 15 killed, 28 wounded and 3 missing. The battalion received the congratulations of the First Army commander and the Distinguished Service Order was conferred upon 2nd Lieut. H.E. Hitchen M.M., 2nd Lieut. J.B. Bradford received the Military Cross and the Military Medal was awarded to Lance-Corpls T. Rigg, H.W. Lawler, Laskey, Hutchinson and Fraser and to Pte. Vocknock." [20]
It seems reasonable to assume that Private Wallace Featherstone lost his life during the action of 1 to 3 March 1917.
Later research records the following casualties: [21]
1 March 1917 – 7 other ranks killed in action including Private Wallace Featherstone
2 March 1917 – 1 other rank died of wounds
3 March 1917 – 5 other ranks killed in action, 1 died of wounds
Private W. Featherstone is buried at grave reference III.L.9 Gommecourt British Cemetery No. 2, Hebuterne, France. The cemetery was originally laid out in 1917 but after the Armistice burials from the battlefield and smaller cemeteries were concentrated here. The cemetery contains 1,357 First World War burials and commemorations of which 675 are identified casualties and 682 are unidentified.[22]
Private W. Featherstone's body was exhumed and re-buried. The Graves Registration Report and Burial Return both record the date of death as 2 March 1917. Private E.J. Eales, 18/DLI has the same date of death and was probably re-interred at the same time. He is buried at III.L.10 next to Private W. Featherstone. [23]
Private W. Featherstone and his brother Private J.R. Featherstone are both commemorated on the family headstone in Etherley cemetery.
[1] CWGC details give 1 February 1916 as the date of death for Private Wallace Featherstone. Soldiers Died in the Great War and "Durham Pals – 18th, 19th & 22nd Battalions of the Durham Light Infantry in the Great War" by John Sheen record it as 1 March 1917. The account of the battalion movements and action would suggest that the later date is correct. Army Form W.3372 records date of death as 2 March 1917 (2.3.17)
[2] England & Wales 1837-1915 Birth Index Vol.10a p.247 Auckland 1882 Q3
[3] 1901 census
[5] Headstone in St. Cuthbert's Churchyard, Etherley
[6] CWGC
[7] Ancestry details
[8] http://www.1914-1918.net/dli.htm
[9] www.1914-1918.net/31div.htm & "The Durham Forces in the Field 1914-1918: The Service Battalions of the Durham Light Infantry" Capt. W. Miles 1920 p.11
[10] Medal Roll card index
[11] Miles p.39-41
[12] "The Somme" P. Hart various pages
[13] Miles various pages
[14] Miles p.50
[17] Miles p.118
[19] Miles p.153 & 154
[21] Soldiers Died in the Great War
[22] CWGC
[23] CWGC Army Form W.3372 & Burial Return
FEATHERSTONE W. Headstone
Featherstone Family
Etherley cemetery


Contact us via phone, e-mail or chat. Our office hours are Mon-Thur 08:10 - 16:45 and Friday 08:10 - 15:00.
Call us on +46 8 449 29 85. Our office hours are Mon-Thur 08:10 - 16:45 och Friday 08:10 - 15:00.
Tough and wear resistant liner bags made of LLD polyethylene. Produced from 100% new raw material and thus guaranteed odorless. LLD-bags are ideal for bins both including offices and in sterile environments. High quality requirements for food packaging diverse articles.
Polynova Nissen stands for good service and high quality in both products and services. With over 40 years of industry experience, we have developed extensive knowledge in finding the best solutions for you and your customers' businesses regardless of where the process begins.
Please write which product you are interested in. We will contact you shortly.


text:
Q: Parsing UNIX timestamps in milliseconds as time Version: gnuplot v5.3.0
Context
I am trying to plot the following CSV data, where the first column is a UNIX timestamps in milliseconds with floating point notation, the second one an integer representing an instant throughput (in units/s).
...
1.6069112402441587e+12,334
1.606911240244567e+12,335
1.6069112402475227e+12,336
1.6069112402481619e+12,337
...

For this, I wrote the following script file:
set xdata time
set timefmt "%s"

set datafile separator comma

plot "results.csv" u 1:3

My understanding from the gnuplot V5 documentation is that the millisecond precision is supported in this version:

The current version of gnuplot stores time to a millisecond precision.

Problem
Upon execution of the plot command, gnuplot throws the following warning for every data entry in the CSV file, and doesn't plot any value:
"throughput.plt", line 15: warning: time value out of range

What I tried
I converted all entries from the first column of the data file to UNIX timestamps in seconds (changed e+12 to e+9). This time plot executes without any error, but the loss of precision makes the graph too approximate to be analyzed.
Is there a way in gnuplot to ingest UNIX timestamps in milliseconds?

A: Subtract the first value from all values. Something like this. You could also use the pseudocolumn $0 for this.
Code: (edit: I prefer to have copy&paste examples, including data)
### normalize time data relative to start time
reset session

# create some random test data
set print $Data
x = 1.6069112402441587e+12
y = 333
do for [i=1:10000] {
    print sprintf("%.16f, %d",x=x+rand(0)*10, y=y+int(rand(0)*15)-7)
}
set print

set datafile separator comma
set key top left
set xlabel "relative time in seconds"

plot t=0 $Data u ((t==0 ? (t0=$1, t=1) : NaN), ($1-t0)/1000 ):2 w l title "relative time"
### end of code

Result:

A: If the column represents time is already expressed as a real number in UNIX time, set timefmt "%s" is not necessary. It is sufficient to read the numbers as they are.
However, the number '1.6069112402441587e+12' in your data is interpreted as UNIX time "52890/12/27 17:24:04 +0000". So you will get the message "warning: time value out of range". This is not the time you intended, of course.
If you were to use your data as it is, the script would look something like this.
set xdata time

# set timefmt "%s"    ### This line is not needed!

set datafile separator comma

set format x "%H:%M\n%.4S"
set grid xtics

plot "results.csv" u ($1/1000):2 w linespoints


This item can be shipped worldwide. LOOKS LIKE ORIGINAL PIECE WAS PUT BACK IN (QUITE WELL). The seller is stancilsantiquesunlimited and is located in Wilson, North Carolina. Antique 2 gallon virginia stoneware blue decorated crock it has a chip/break repair to the top lip.


text:
Catalina Island Company Launches New 'Rumble & Trek' Tour, Part of Growing Trend Focusing on Outdoor Destinations This Fall
AVALON, Calif.--(BUSINESS WIRE)--Sep 15, 2020--
Experts are predicting that the biggest trend for travel this fall will continue to be safety first, with domestic destinations, outdoor activities and fewer crowds ranking high among the most popular criteria for getaways.
Experience Catalina Island like never before with Catalina Island Company's new Rumble & Trek tour, a combination of two of its most popular outdoor activities in one exhilarating adventure. Begin aboard a eco-friendly biofuel Hummer to explore stunning vistas from every angle and end with a 2.2-mile naturally socially distanced hike with a trained naturalist for an up-close look at much of the island's unspoiled beauty. For more information go to www.visitcatalinaisland.com. (Photo: Business Wire)
Catalina Island Company, which operates hotels, dining establishments, venues and activities throughout California's Catalina Island, has seen increased demand for its land and ocean tours that allow visitors to responsibly experience the wide-open spaces and fresh ocean breezes of the island. Its new Rumble & Trek tour, announced today, combines two of the island's most popular activities into one exhilarating outdoor adventure that is an amazing way to experience Catalina Island like never before.
The new Rumble & Trek tour begins aboard a biofuel Hummer, powered by clean-burning recycled vegetable oil, for a thrilling ride through the hills and a spectacular view from 1,602 feet at Catalina's Airport-in-the-Sky. From there, participants are provided a bottle of water before embarking on a guided 2.2-mile hike with a trained naturalist on the Airport Loop Trail, highlighted by gorgeous vistas of El Rancho Escondido, Buffalo Springs and the former Soapstone Quarry. The experience concludes with a signature "Killer Cookie" at the historic airport's DC-3 Grill before returning to Avalon via Hummer. The Rumble & Trek tour is $99 per person. The tour launches on September 16, 2020 and reservations are recommended.
"Secluded and close to home, especially for those on the West Coast, Catalina Island is the perfect getaway for those looking to take a trip in a thoughtful and responsible way," said Randy Herrel, Sr., president and chief executive officer of Catalina Island Company. "Catalina Island Company offers a range of naturally distanced activities – such as Rumble & Trek – as well as several outdoor dining opportunities that allow visitors and residents to spread out, enjoy our beautiful island, and avoid crowds."
To maintain social distancing, the new Rumble & Trek tour is limited to eight people, or up to 12 people in the same family or traveling together. Backed by its KeepWell™ Commitment and rigorous cleaning and sanitation protocols, Catalina Island Company also now offers private versions of its most popular activities including the Undersea Sub Expedition, Sea Life Safari, Bison Expedition, Ridgetop Eco Adventure, and the thrilling Zip Line Eco Tour.
Visitors can also take part in solitary activities like snorkeling, stand up paddle boarding, and hiking or biking the miles of trails found throughout Catalina. For a slower pace, guests can enjoy a leisurely lunch or sip a Catalina Unquarantini cocktail at Descanso Beach Club, Catalina Island's best beachfront dining venue, or Discover Avalon on a delightful journey through the heart of this friendly and historic town.
For more details on the steps Catalina Island Company is taking to ensure its guests have a happy and healthy vacation, please see its KeepWell Commitment here. For more information on visiting Catalina Island and to make a reservation, call 877.778.8322 or go to VisitCatalinaIsland.com.
ABOUT CATALINA ISLAND COMPANY
As Catalina Island's premier resort operator, Catalina Island Company provides exceptional guest experiences, with dining establishments, hotels, a beach club, spa, entertainment venues, and more than a dozen land and sea tours and activities. The debut of the newly renovated Hotel Atwater adds to the company's other Avalon accommodations at Mt Ada and the Pavilion Hotel. Other notable entities include Island Spa Catalina, the island's only complete spa destination, and Descanso Beach Club, home of Catalina's only beachside restaurant & bar, as well as the Zip Line Eco Tour, Catalina Aerial Adventure and Catalina Falconry Experience, all part of Descanso Adventures. Catalina Island Company also has an extensive portfolio of premier meeting and event venues, including oceanfront Catherine's Terrace at Descanso Beach Club and the Avalon Boardroom in Hotel Atwater. Additionally, Catalina Island Company owns the village of Two Harbors on Catalina's west end, including Harbor Sands, Banning House Lodge & Villas, Harbor Reef Restaurant, several campgrounds, and more. For additional information, go to VisitCatalinaIsland.com.
CONTACT: Media Contact:
Lauren Yacker
KEYWORD: CALIFORNIA UNITED STATES NORTH AMERICA
INDUSTRY KEYWORD: SPORTS TRANSPORTATION LODGING DESTINATIONS TRAVEL WOMEN MEN FAMILY CONSUMER OUTDOORS OTHER TRAVEL
SOURCE: Catalina Island Company
Copyright Business Wire 2020.
PUB: 09/15/2020 08:06 AM/DISC: 09/15/2020 08:06 AM
http://www.businesswire.com/news/home/20200915005312/en
Insider Q&A: Mark Weinstein, MeWe's anti-Facebook CEO
By FRANK BAJAK 18/01/2021


In addition to announcing its new 64-bit A7 chip, which will power the flagship iPhone 5s, Apple also revealed that iOS 7 itself will be 64-bit. This means a native 64-bit kernel, along with 64-bit libraries and drivers. Accordingly, all of the native apps that come baked into iOS have been retooled to serve up faster performance (don't worry, iOS 7 will still run 32-bit apps from third-party developers). For devs who do want to make the switch, Apple is promising a "seamless" transition, though details are light at the moment. In the meantime, between the A7 chip and this software tune-up, Apple is promising the CPU performance will be 40 times what we saw in the original iPhone. Then again, comparing the new iPhones to the one that came out in 2007 isn't a very helpful comparison -- you might just have to wait for our initial hands-on and, later, a full review.


This salad came together in my kitchen with some leftover rotisserie chicken I had made the night before; since my family doesn't enjoy leftovers I always try to recreate ones we have into something new. I removed all the chicken skin, and shredded the chicken breasts just by pulling it gently apart. This salad is so easy to make and great way to transform your chicken dinners. We ate this over fresh salad, and also in a grilled corn tortilla (both ways were amazing!!).
1. In a large bowl add the shredded chicken, heirloom tomato halves, chopped celery hearts, small diced jalapeno. Remove mint leaves from stem and add to bowl. In a separate bowl whisk together harissa, preserved lemon, olive oil, lemon juice, ginger, garlic, salt and pepper. Pour over chicken salad and toss until completely combined.
*Eat salad with avocado, fresh lemon, and hot sauce in a tortilla, sandwich, or to top any fresh salad.


With a customer-centric approach and fostering partnerships with industry leaders, Wayne has created and marketed products that have evolved to support the dynamic software development, test, and delivery landscape. He has contributed to the design of many innovative technologies and has been awarded several patents for his inventions. A recognized leader on topics such as service virtualization, SOA, and API quality, software quality governance, and application security, he is a frequent contributor to industry publications and the author of the book Continuous Testing for IT Leaders . Wayne has been a contributor to the software testing space for fifteen years and in the software industry for more than twenty years. He holds a BA in business economics and an MBA in finance and business strategy.
A What are the few widely used Test Automation tools for Software testing?


Many of the largest e-commerce businesses in the world use Magento because it is a flexible, scalable and user friendly platform. SEO benefits, speed and great analytics make it an even more powerful solution. If you need a ground breaking eCommerce site that attracts traffic and drives sales, Magento Website Developers and solution specialists have the skills to make it happen. With Magento developers, your website will meet your targets and exceed them. They will bolster your business with a well-designed commerce website that attracts interest, turns shoppers into buyers and steers your business forward.
With Magento, everything is modular so you don't have to modify the core functionality which makes it much easier to customize for client's needs. Magento provides an array of flexible features and thousands of extensions which can be customized for your business's needs. Services such as catalog management, purchaser accounts and mobile commerce help to broaden your client base while marketing analytic tools help in keeping check on what's working and what is not. Controlling every facet a store from merchandising to promotions is possible with Magento. Magento has an array of matchless features which means that it has everything that is required to create all types of functionalities, plug-ins, modules and e-commerce applications.
There are many different ecommerce platforms available in Aurora but there are a number of reasons why Magento is so popular and why choosing it for your business could make future growth a whole lot easier.
Magento is an award winning ecommerce platform, marketed as the high performance, scalable digital commerce solution for fast growing and large businesses. While every platform has its merits, Magento has proven itself to be head and shoulders above the rest when it comes to delivering scalable ecommerce websites for growing businesses. Magento now holds 30% market share among the top 30 ecommerce platforms thanks to its power and flexibility. Magento has delivered everything from heightened user engagement and improved performance to smoother navigation and enhanced productivity. It's simpler to use too.
Your business needs of today will have shifted by tomorrow and could be unrecognizable by the next year. Your website requires ongoing maintenance and development to keep at pace with market trends and support your business as it grows. Whether your business means extending your product range or diversifying to target new markets, Magento is fully scalable. It has every ecommerce feature you could possibly need as you move forward, rather than requiring you to start again.
It is frustrating to find yourself working with a platform that limits your business's potential or forces your brand into a pigeon hole. Magento is that open source platform that is fully customizable to meet your unique needs. It is adaptable to responsive design and has powerful product options and there is a huge marketplace for Magento plugins so you can ensure your website is tailor made for your business requirements.


text:
It is difficult to put into words how much Audrey is missed! She was a woman who was a true example of what it is to live as a "Woman of God". Below is a copy of her memorial:
Audrey Lucille Dorsch 1929 - 2011
Audrey Dorsch was promoted to heaven on November 20th, 2011.
She was 81 years old.
She was born in Wheeler, Kansas on December 2, 1929 to the late Joe and Rosa Shoemaker. She was preceded in death by her siblings; Maxine, Gus, Junior, and Janice.
She graduated from St. Francis High School in Kansas and married Neal M. Dorsch on December 4th, 1949. They made their home in Flagler, Colorado where they were wheat farmers until they relocated to Mission, Texas in 1988 to start Melody Lane Christian Renewal Center to serve the needs of missionaries as they traveled to and from Mexico.
Audrey is survived by her husband, Neal M. Dorsch, and two children, James N. Dorsch of Houston, Texas, and Nancy King (Spouse, Reggie King) of Mission, Texas; two grandchildren, Naomi and Abigail Grojean, and a brother, Vern Shoemaker of Cawker City, Kansas, and many other family members and friends.
A Memorial service was held for Audrey Lucille Dorsch of Mission, Texas at Palm Valley Church November 28th at 7:00 p.m. Visitation and funeral were held at the Kreidler Funeral Home on November 22nd and 23rd. Internment was at Valley Memorial Gardens in Mission, Texas.
Audrey spent her life serving others and touched many people whose lives were enriched by knowing her. She will be greatly missed.
Many women have done excellently
but you surpass them all.
Charm is deceitful, and beauty is vain,
but a woman who fears
the LORD is to be praised.
Give her of the fruit of her hands,
and let her works
praise her in the gates.
Proverbs 31: 29-31
Many have asked what would be appropriate to do in honor of Audrey, and after much consideration we have decided that we would dedicate our next construction project to her name. If you would like to contribute towards this project please contact us and we will be sure that all funds are used solely towards this end.


text:
Love Is Real! Tom From The First Episode of Netflix's 'Queer Eye' Got Engaged!
This news cured our Tuesday blues.
America's first true love story of 2018 may have a happy ending after all.
Tom Jackson, who starred in the first episode of the popular Queer Eye series on Netflix, says the he and his ex-wife, Abby, are engaged!
Jackson won over the hearts of viewers everywhere when the Netflix show premiered in January when he insisted that "you can't fix ugly" (when referring to himself). The "Fab Five" helped Tom remodel his home (and life) in Georgia. In the process of the makeover, Tom gained a little confidence to pursue his ex-wife (and soulmate), Abby. Naturally, we couldn't help but to feel something as Tom spoke about Abby throughout the episode.
Jackson's episode was filmed last summer, and the eight episodes premiered on Netflix on February 7.
About two weeks after the show's premiere, Tom tweeted that he and Abby were no longer together. "She will always be the love of my life," he wrote in a tweet on February 27.
I just watched my episode for about the 20th time. I cry -- like a baby -- ever time I watch it. Just to let the world -- know, Abby and I are no longer together. She will always be the love ❤ of my life. I will always love ❤ her more than anything!!!!!!!
— Tom Jackson (@TomJack20176306) February 28, 2018
In a later tweet, Jackson clarified that they had actually split back in September.
Naturally, fans were DEVASTATED the news that our favorite couple had split. In fact, Buzzfeed wrote the next day: "Love is dead, RIP love."
Last week, Tom said that the couple reunited, and now we have even better news!
Yes, Tom announced the couple's engagement on Twitter last night (March 12):
It's official, Abby and I are engaged. What a Netflix special the would be. If the Fab 5 planned and attended our wedding!!!!!!!!! pic.twitter.com/4KV4u9Rji4
— Tom Jackson (@TomJack20176306) March 13, 2018
By the way, we TOTALLY liked Tom's idea that the "Fab Five" should serve as his groomsmen.
Everyone is welcome to come to our wedding --. I'm praying that the Fab 5 can find time in their busy schedule to come. I'd love ❤ for Bobby be best man, and the other 4 be my grooms men. Chandler will be my ring bearer.
Sign us up to watch that Netflix wedding special, Tom!