text:
// Copyright 2006 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/**
 * @fileoverview Definition of the Logger class. Please minimize dependencies
 * this file has on other closure classes as any dependency it takes won't be
 * able to use the logging infrastructure.
 *
 * @see ../demos/debug.html
 */

goog.provide('goog.debug.LogManager');
goog.provide('goog.debug.Logger');
goog.provide('goog.debug.Logger.Level');

goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.debug');
goog.require('goog.debug.LogBuffer');
goog.require('goog.debug.LogRecord');

/**
 * The Logger is an object used for logging debug messages. Loggers are
 * normally named, using a hierarchical dot-separated namespace. Logger names
 * can be arbitrary strings, but they should normally be based on the package
 * name or class name of the logged component, such as goog.net.BrowserChannel.
 *
 * The Logger object is loosely based on the java class
 * java.util.logging.Logger. It supports different levels of filtering for
 * different loggers.
 *
 * The logger object should never be instantiated by application code. It
 * should always use the goog.debug.Logger.getLogger function.
 *
 * @constructor
 * @param {string} name The name of the Logger.
 * @final
 */
goog.debug.Logger = function(name) {
  /**
   * Name of the Logger. Generally a dot-separated namespace
   * @type {string}
   * @private
   */
  this.name_ = name;
};

/**
 * Parent Logger.
 * @type {goog.debug.Logger}
 * @private
 */
goog.debug.Logger.prototype.parent_ = null;

/**
 * Level that this logger only filters above. Null indicates it should
 * inherit from the parent.
 * @type {goog.debug.Logger.Level}
 * @private
 */
goog.debug.Logger.prototype.level_ = null;

/**
 * Map of children loggers. The keys are the leaf names of the children and
 * the values are the child loggers.
 * @type {Object}
 * @private
 */
goog.debug.Logger.prototype.children_ = null;

/**
 * Handlers that are listening to this logger.
 * @type {Array.<Function>}
 * @private
 */
goog.debug.Logger.prototype.handlers_ = null;

/**
 * @define {boolean} Toggles whether loggers other than the root logger can have
 *     log handlers attached to them and whether they can have their log level
 *     set. Logging is a bit faster when this is set to false.
 */
goog.define('goog.debug.Logger.ENABLE_HIERARCHY', true);

if (!goog.debug.Logger.ENABLE_HIERARCHY) {
  /**
   * @type {!Array.<Function>}
   * @private
   */
  goog.debug.Logger.rootHandlers_ = [];

  /**
   * @type {goog.debug.Logger.Level}
   * @private
   */
  goog.debug.Logger.rootLevel_;
}

/**
 * The Level class defines a set of standard logging levels that
 * can be used to control logging output.  The logging Level objects
 * are ordered and are specified by ordered integers.  Enabling logging
 * at a given level also enables logging at all higher levels.
 *

 * Clients should normally use the predefined Level constants such
 * as Level.SEVERE.
 *

 * The levels in descending order are:
 *

 *
SEVERE (highest value)
 *
WARNING
 *
INFO
 *
CONFIG
 *
FINE
 *
FINER
 *
FINEST  (lowest value)
 *

 * In addition there is a level OFF that can be used to turn
 * off logging, and a level ALL that can be used to enable
 * logging of all messages.
 *
 * @param {string} name The name of the level.
 * @param {number} value The numeric value of the level.
 * @constructor
 * @final
 */
goog.debug.Logger.Level = function(name, value) {
  /**
   * The name of the level
   * @type {string}
   */
  this.name = name;

  /**
   * The numeric value of the level
   * @type {number}
   */
  this.value = value;
};

/**
 * @return {string} String representation of the logger level.
 * @override
 */
goog.debug.Logger.Level.prototype.toString = function() {
  return this.name;
};

/**
 * OFF is a special level that can be used to turn off logging.
 * This level is initialized to Infinity.
 * @type {!goog.debug.Logger.Level}
 */
goog.debug.Logger.Level.OFF =
    new goog.debug.Logger.Level('OFF', Infinity);

/**
 * SHOUT is a message level for extra debugging loudness.
 * This level is initialized to 1200.
 * @type {!goog.debug.Logger.Level}
 */
goog.debug.Logger.Level.SHOUT = new goog.debug.Logger.Level('SHOUT', 1200);

/**
 * SEVERE is a message level indicating a serious failure.
 * This level is initialized to 1000.
 * @type {!goog.debug.Logger.Level}
 */
goog.debug.Logger.Level.SEVERE = new goog.debug.Logger.Level('SEVERE', 1000);

/**
 * WARNING is a message level indicating a potential problem.
 * This level is initialized to 900.
 * @type {!goog.debug.Logger.Level}
 */
goog.debug.Logger.Level.WARNING = new goog.debug.Logger.Level('WARNING', 900);

/**
 * INFO is a message level for informational messages.
 * This level is initialized to 800.
 * @type {!goog.debug.Logger.Level}
 */
goog.debug.Logger.Level.INFO = new goog.debug.Logger.Level('INFO', 800);

/**
 * CONFIG is a message level for static configuration messages.
 * This level is initialized to 700.
 * @type {!goog.debug.Logger.Level}
 */
goog.debug.Logger.Level.CONFIG = new goog.debug.Logger.Level('CONFIG', 700);

/**
 * FINE is a message level providing tracing information.
 * This level is initialized to 500.
 * @type {!goog.debug.Logger.Level}
 */
goog.debug.Logger.Level.FINE = new goog.debug.Logger.Level('FINE', 500);

/**
 * FINER indicates a fairly detailed tracing message.
 * This level is initialized to 400.
 * @type {!goog.debug.Logger.Level}
 */
goog.debug.Logger.Level.FINER = new goog.debug.Logger.Level('FINER', 400);

/**
 * FINEST indicates a highly detailed tracing message.
 * This level is initialized to 300.
 * @type {!goog.debug.Logger.Level}
 */

goog.debug.Logger.Level.FINEST = new goog.debug.Logger.Level('FINEST', 300);

/**
 * ALL indicates that all messages should be logged.
 * This level is initialized to 0.
 * @type {!goog.debug.Logger.Level}
 */
goog.debug.Logger.Level.ALL = new goog.debug.Logger.Level('ALL', 0);

/**
 * The predefined levels.
 * @type {!Array.<!goog.debug.Logger.Level>}
 * @final
 */
goog.debug.Logger.Level.PREDEFINED_LEVELS = [
  goog.debug.Logger.Level.OFF,
  goog.debug.Logger.Level.SHOUT,
  goog.debug.Logger.Level.SEVERE,
  goog.debug.Logger.Level.WARNING,
  goog.debug.Logger.Level.INFO,
  goog.debug.Logger.Level.CONFIG,
  goog.debug.Logger.Level.FINE,
  goog.debug.Logger.Level.FINER,
  goog.debug.Logger.Level.FINEST,
  goog.debug.Logger.Level.ALL];

/**
 * A lookup map used to find the level object based on the name or value of
 * the level object.
 * @type {Object}
 * @private
 */
goog.debug.Logger.Level.predefinedLevelsCache_ = null;

/**
 * Creates the predefined levels cache and populates it.
 * @private
 */
goog.debug.Logger.Level.createPredefinedLevelsCache_ = function() {
  goog.debug.Logger.Level.predefinedLevelsCache_ = {};
  for (var i = 0, level; level = goog.debug.Logger.Level.PREDEFINED_LEVELS[i];
       i++) {
    goog.debug.Logger.Level.predefinedLevelsCache_[level.value] = level;
    goog.debug.Logger.Level.predefinedLevelsCache_[level.name] = level;
  }
};

/**
 * Gets the predefined level with the given name.
 * @param {string} name The name of the level.
 * @return {goog.debug.Logger.Level} The level, or null if none found.
 */
goog.debug.Logger.Level.getPredefinedLevel = function(name) {
  if (!goog.debug.Logger.Level.predefinedLevelsCache_) {
    goog.debug.Logger.Level.createPredefinedLevelsCache_();
  }

  return goog.debug.Logger.Level.predefinedLevelsCache_[name] || null;
};

/**
 * Gets the highest predefined level <= #value.
 * @param {number} value Level value.
 * @return {goog.debug.Logger.Level} The level, or null if none found.
 */
goog.debug.Logger.Level.getPredefinedLevelByValue = function(value) {
  if (!goog.debug.Logger.Level.predefinedLevelsCache_) {
    goog.debug.Logger.Level.createPredefinedLevelsCache_();
  }

  if (value in goog.debug.Logger.Level.predefinedLevelsCache_) {
    return goog.debug.Logger.Level.predefinedLevelsCache_[value];
  }

  for (var i = 0; i < goog.debug.Logger.Level.PREDEFINED_LEVELS.length; ++i) {
    var level = goog.debug.Logger.Level.PREDEFINED_LEVELS[i];
    if (level.value <= value) {
      return level;
    }
  }
  return null;
};

/**
 * Finds or creates a logger for a named subsystem. If a logger has already been
 * created with the given name it is returned. Otherwise a new logger is
 * created. If a new logger is created its log level will be configured based
 * on the LogManager configuration and it will configured to also send logging
 * output to its parent's handlers. It will be registered in the LogManager
 * global namespace.
 *
 * @param {string} name A name for the logger. This should be a dot-separated
 * name and should normally be based on the package name or class name of the
 * subsystem, such as goog.net.BrowserChannel.
 * @return {!goog.debug.Logger} The named logger.
 */
goog.debug.Logger.getLogger = function(name) {
  return goog.debug.LogManager.getLogger(name);
};

/**
 * Logs a message to profiling tools, if available.
 * {@see http://code.google.com/webtoolkit/speedtracer/logging-api.html}
 * {@see http://msdn.microsoft.com/en-us/library/dd433074(VS.85).aspx}
 * @param {string} msg The message to log.
 */
goog.debug.Logger.logToProfilers = function(msg) {
  // Using goog.global, as loggers might be used in window-less contexts.
  if (goog.global['console']) {
    if (goog.global['console']['timeStamp']) {
      // Logs a message to Firebug, Web Inspector, SpeedTracer, etc.
      goog.global['console']['timeStamp'](msg);
    } else if (goog.global['console']['markTimeline']) {
      // TODO(user): markTimeline is deprecated. Drop this else clause entirely
      // after Chrome M14 hits stable.
      goog.global['console']['markTimeline'](msg);
    }
  }

  if (goog.global['msWriteProfilerMark']) {
    // Logs a message to the Microsoft profiler
    goog.global['msWriteProfilerMark'](msg);
  }
};

/**
 * Gets the name of this logger.
 * @return {string} The name of this logger.
 */
goog.debug.Logger.prototype.getName = function() {
  return this.name_;
};

/**
 * Adds a handler to the logger. This doesn't use the event system because
 * we want to be able to add logging to the event system.
 * @param {Function} handler Handler function to add.
 */
goog.debug.Logger.prototype.addHandler = function(handler) {
  if (goog.debug.LOGGING_ENABLED) {
    if (goog.debug.Logger.ENABLE_HIERARCHY) {
      if (!this.handlers_) {
        this.handlers_ = [];
      }
      this.handlers_.push(handler);
    } else {
      goog.asserts.assert(!this.name_,
          'Cannot call addHandler on a non-root logger when ' +
          'goog.debug.Logger.ENABLE_HIERARCHY is false.');
      goog.debug.Logger.rootHandlers_.push(handler);
    }
  }
};

/**
 * Removes a handler from the logger. This doesn't use the event system because
 * we want to be able to add logging to the event system.
 * @param {Function} handler Handler function to remove.
 * @return {boolean} Whether the handler was removed.
 */
goog.debug.Logger.prototype.removeHandler = function(handler) {
  if (goog.debug.LOGGING_ENABLED) {
    var handlers = goog.debug.Logger.ENABLE_HIERARCHY ? this.handlers_ :
        goog.debug.Logger.rootHandlers_;
    return !!handlers && goog.array.remove(handlers, handler);
  } else {
    return false;
  }
};

/**
 * Returns the parent of this logger.
 * @return {goog.debug.Logger} The parent logger or null if this is the root.
 */
goog.debug.Logger.prototype.getParent = function() {
  return this.parent_;
};

/**
 * Returns the children of this logger as a map of the child name to the logger.
 * @return {!Object} The map where the keys are the child leaf names and the
 *     values are the Logger objects.
 */
goog.debug.Logger.prototype.getChildren = function() {
  if (!this.children_) {
    this.children_ = {};
  }
  return this.children_;
};

/**
 * Set the log level specifying which message levels will be logged by this
 * logger. Message levels lower than this value will be discarded.
 * The level value Level.OFF can be used to turn off logging. If the new level
 * is null, it means that this node should inherit its level from its nearest
 * ancestor with a specific (non-null) level value.
 *
 * @param {goog.debug.Logger.Level} level The new level.
 */
goog.debug.Logger.prototype.setLevel = function(level) {
  if (goog.debug.LOGGING_ENABLED) {
    if (goog.debug.Logger.ENABLE_HIERARCHY) {
      this.level_ = level;
    } else {
      goog.asserts.assert(!this.name_,
          'Cannot call setLevel() on a non-root logger when ' +
          'goog.debug.Logger.ENABLE_HIERARCHY is false.');
      goog.debug.Logger.rootLevel_ = level;
    }
  }
};

/**
 * Gets the log level specifying which message levels will be logged by this
 * logger. Message levels lower than this value will be discarded.
 * The level value Level.OFF can be used to turn off logging. If the level
 * is null, it means that this node should inherit its level from its nearest
 * ancestor with a specific (non-null) level value.
 *
 * @return {goog.debug.Logger.Level} The level.
 */
goog.debug.Logger.prototype.getLevel = function() {
  return goog.debug.LOGGING_ENABLED ?
      this.level_ : goog.debug.Logger.Level.OFF;
};

/**
 * Returns the effective level of the logger based on its ancestors' levels.
 * @return {goog.debug.Logger.Level} The level.
 */
goog.debug.Logger.prototype.getEffectiveLevel = function() {
  if (!goog.debug.LOGGING_ENABLED) {
    return goog.debug.Logger.Level.OFF;
  }

  if (!goog.debug.Logger.ENABLE_HIERARCHY) {
    return goog.debug.Logger.rootLevel_;
  }
  if (this.level_) {
    return this.level_;
  }
  if (this.parent_) {
    return this.parent_.getEffectiveLevel();
  }
  goog.asserts.fail('Root logger has no level set.');
  return null;
};

/**
 * Checks if a message of the given level would actually be logged by this
 * logger. This check is based on the Loggers effective level, which may be
 * inherited from its parent.
 * @param {goog.debug.Logger.Level} level The level to check.
 * @return {boolean} Whether the message would be logged.
 */
goog.debug.Logger.prototype.isLoggable = function(level) {
  return goog.debug.LOGGING_ENABLED &&
      level.value >= this.getEffectiveLevel().value;
};

/**
 * Logs a message. If the logger is currently enabled for the
 * given message level then the given message is forwarded to all the
 * registered output Handler objects.
 * @param {goog.debug.Logger.Level} level One of the level identifiers.
 * @param {string} msg The string message.
 * @param {Error|Object=} opt_exception An exception associated with the
 *     message.
 */
goog.debug.Logger.prototype.log = function(level, msg, opt_exception) {
  // java caches the effective level, not sure it's necessary here
  if (goog.debug.LOGGING_ENABLED && this.isLoggable(level)) {
    this.doLogRecord_(this.getLogRecord(level, msg, opt_exception));
  }
};

/**
 * Creates a new log record and adds the exception (if present) to it.
 * @param {goog.debug.Logger.Level} level One of the level identifiers.
 * @param {string} msg The string message.
 * @param {Error|Object=} opt_exception An exception associated with the
 *     message.
 * @return {!goog.debug.LogRecord} A log record.
 */
goog.debug.Logger.prototype.getLogRecord = function(level, msg, opt_exception) {
  if (goog.debug.LogBuffer.isBufferingEnabled()) {
    var logRecord =
        goog.debug.LogBuffer.getInstance().addRecord(level, msg, this.name_);
  } else {
    logRecord = new goog.debug.LogRecord(level, String(msg), this.name_);
  }
  if (opt_exception) {
    logRecord.setException(opt_exception);
    logRecord.setExceptionText(
        goog.debug.exposeException(opt_exception, arguments.callee.caller));
  }
  return logRecord;
};

/**
 * Logs a message at the Logger.Level.SHOUT level.
 * If the logger is currently enabled for the given message level then the
 * given message is forwarded to all the registered output Handler objects.
 * @param {string} msg The string message.
 * @param {Error=} opt_exception An exception associated with the message.
 */
goog.debug.Logger.prototype.shout = function(msg, opt_exception) {
  if (goog.debug.LOGGING_ENABLED) {
    this.log(goog.debug.Logger.Level.SHOUT, msg, opt_exception);
  }
};

/**
 * Logs a message at the Logger.Level.SEVERE level.
 * If the logger is currently enabled for the given message level then the
 * given message is forwarded to all the registered output Handler objects.
 * @param {string} msg The string message.
 * @param {Error=} opt_exception An exception associated with the message.
 */
goog.debug.Logger.prototype.severe = function(msg, opt_exception) {
  if (goog.debug.LOGGING_ENABLED) {
    this.log(goog.debug.Logger.Level.SEVERE, msg, opt_exception);
  }
};

/**
 * Logs a message at the Logger.Level.WARNING level.
 * If the logger is currently enabled for the given message level then the
 * given message is forwarded to all the registered output Handler objects.
 * @param {string} msg The string message.
 * @param {Error=} opt_exception An exception associated with the message.
 */
goog.debug.Logger.prototype.warning = function(msg, opt_exception) {
  if (goog.debug.LOGGING_ENABLED) {
    this.log(goog.debug.Logger.Level.WARNING, msg, opt_exception);
  }
};

/**
 * Logs a message at the Logger.Level.INFO level.
 * If the logger is currently enabled for the given message level then the
 * given message is forwarded to all the registered output Handler objects.
 * @param {string} msg The string message.
 * @param {Error=} opt_exception An exception associated with the message.
 */
goog.debug.Logger.prototype.info = function(msg, opt_exception) {
  if (goog.debug.LOGGING_ENABLED) {
    this.log(goog.debug.Logger.Level.INFO, msg, opt_exception);
  }
};

/**
 * Logs a message at the Logger.Level.CONFIG level.
 * If the logger is currently enabled for the given message level then the
 * given message is forwarded to all the registered output Handler objects.
 * @param {string} msg The string message.
 * @param {Error=} opt_exception An exception associated with the message.
 */
goog.debug.Logger.prototype.config = function(msg, opt_exception) {
  if (goog.debug.LOGGING_ENABLED) {
    this.log(goog.debug.Logger.Level.CONFIG, msg, opt_exception);
  }
};

/**
 * Logs a message at the Logger.Level.FINE level.
 * If the logger is currently enabled for the given message level then the
 * given message is forwarded to all the registered output Handler objects.
 * @param {string} msg The string message.
 * @param {Error=} opt_exception An exception associated with the message.
 */
goog.debug.Logger.prototype.fine = function(msg, opt_exception) {
  if (goog.debug.LOGGING_ENABLED) {
    this.log(goog.debug.Logger.Level.FINE, msg, opt_exception);
  }
};

/**
 * Logs a message at the Logger.Level.FINER level.
 * If the logger is currently enabled for the given message level then the
 * given message is forwarded to all the registered output Handler objects.
 * @param {string} msg The string message.
 * @param {Error=} opt_exception An exception associated with the message.
 */
goog.debug.Logger.prototype.finer = function(msg, opt_exception) {
  if (goog.debug.LOGGING_ENABLED) {
    this.log(goog.debug.Logger.Level.FINER, msg, opt_exception);
  }
};

/**
 * Logs a message at the Logger.Level.FINEST level.
 * If the logger is currently enabled for the given message level then the
 * given message is forwarded to all the registered output Handler objects.
 * @param {string} msg The string message.
 * @param {Error=} opt_exception An exception associated with the message.
 */
goog.debug.Logger.prototype.finest = function(msg, opt_exception) {
  if (goog.debug.LOGGING_ENABLED) {
    this.log(goog.debug.Logger.Level.FINEST, msg, opt_exception);
  }
};

/**
 * Logs a LogRecord. If the logger is currently enabled for the
 * given message level then the given message is forwarded to all the
 * registered output Handler objects.
 * @param {goog.debug.LogRecord} logRecord A log record to log.
 */
goog.debug.Logger.prototype.logRecord = function(logRecord) {
  if (goog.debug.LOGGING_ENABLED && this.isLoggable(logRecord.getLevel())) {
    this.doLogRecord_(logRecord);
  }
};

/**
 * Logs a LogRecord.
 * @param {goog.debug.LogRecord} logRecord A log record to log.
 * @private
 */
goog.debug.Logger.prototype.doLogRecord_ = function(logRecord) {
  goog.debug.Logger.logToProfilers('log:' + logRecord.getMessage());
  if (goog.debug.Logger.ENABLE_HIERARCHY) {
    var target = this;
    while (target) {
      target.callPublish_(logRecord);
      target = target.getParent();
    }
  } else {
    for (var i = 0, handler; handler = goog.debug.Logger.rootHandlers_[i++]; ) {
      handler(logRecord);
    }
  }
};

/**
 * Calls the handlers for publish.
 * @param {goog.debug.LogRecord} logRecord The log record to publish.
 * @private
 */
goog.debug.Logger.prototype.callPublish_ = function(logRecord) {
  if (this.handlers_) {
    for (var i = 0, handler; handler = this.handlers_[i]; i++) {
      handler(logRecord);
    }
  }
};

/**
 * Sets the parent of this logger. This is used for setting up the logger tree.
 * @param {goog.debug.Logger} parent The parent logger.
 * @private
 */
goog.debug.Logger.prototype.setParent_ = function(parent) {
  this.parent_ = parent;
};

/**
 * Adds a child to this logger. This is used for setting up the logger tree.
 * @param {string} name The leaf name of the child.
 * @param {goog.debug.Logger} logger The child logger.
 * @private
 */
goog.debug.Logger.prototype.addChild_ = function(name, logger) {
  this.getChildren()[name] = logger;
};

/**
 * There is a single global LogManager object that is used to maintain a set of
 * shared state about Loggers and log services. This is loosely based on the
 * java class java.util.logging.LogManager.
 */
goog.debug.LogManager = {};

/**
 * Map of logger names to logger objects.
 *
 * @type {!Object}
 * @private
 */
goog.debug.LogManager.loggers_ = {};

/**
 * The root logger which is the root of the logger tree.
 * @type {goog.debug.Logger}
 * @private
 */
goog.debug.LogManager.rootLogger_ = null;

/**
 * Initializes the LogManager if not already initialized.
 */
goog.debug.LogManager.initialize = function() {
  if (!goog.debug.LogManager.rootLogger_) {
    goog.debug.LogManager.rootLogger_ = new goog.debug.Logger('');
    goog.debug.LogManager.loggers_[''] = goog.debug.LogManager.rootLogger_;
    goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG);
  }
};

/**
 * Returns all the loggers.
 * @return {!Object} Map of logger names to logger objects.
 */
goog.debug.LogManager.getLoggers = function() {
  return goog.debug.LogManager.loggers_;
};

/**
 * Returns the root of the logger tree namespace, the logger with the empty
 * string as its name.
 *
 * @return {!goog.debug.Logger} The root logger.
 */
goog.debug.LogManager.getRoot = function() {
  goog.debug.LogManager.initialize();
  return /** @type {!goog.debug.Logger} */ (goog.debug.LogManager.rootLogger_);
};

/**
 * Finds a named logger.
 *
 * @param {string} name A name for the logger. This should be a dot-separated
 * name and should normally be based on the package name or class name of the
 * subsystem, such as goog.net.BrowserChannel.
 * @return {!goog.debug.Logger} The named logger.
 */
goog.debug.LogManager.getLogger = function(name) {
  goog.debug.LogManager.initialize();
  var ret = goog.debug.LogManager.loggers_[name];
  return ret || goog.debug.LogManager.createLogger_(name);
};

/**
 * Creates a function that can be passed to goog.debug.catchErrors. The function
 * will log all reported errors using the given logger.
 * @param {goog.debug.Logger=} opt_logger The logger to log the errors to.
 *     Defaults to the root logger.
 * @return {function(Object)} The created function.
 */
goog.debug.LogManager.createFunctionForCatchErrors = function(opt_logger) {
  return function(info) {
    var logger = opt_logger || goog.debug.LogManager.getRoot();
    logger.severe('Error: ' + info.message + ' (' + info.fileName +
                  ' @ Line: ' + info.line + ')');
  };
};

/**
 * Creates the named logger. Will also create the parents of the named logger
 * if they don't yet exist.
 * @param {string} name The name of the logger.
 * @return {!goog.debug.Logger} The named logger.
 * @private
 */
goog.debug.LogManager.createLogger_ = function(name) {
  // find parent logger
  var logger = new goog.debug.Logger(name);
  if (goog.debug.Logger.ENABLE_HIERARCHY) {
    var lastDotIndex = name.lastIndexOf('.');
    var parentName = name.substr(0, lastDotIndex);
    var leafName = name.substr(lastDotIndex + 1);
    var parentLogger = goog.debug.LogManager.getLogger(parentName);

    // tell the parent about the child and the child about the parent
    parentLogger.addChild_(leafName, logger);
    logger.setParent_(parentLogger);
  }

  goog.debug.LogManager.loggers_[name] = logger;
  return logger;
};


October 2013 - Personal Disability Insurance | Source Brokerage, Inc.
Selling Life but not Disability?
Everyone knows financial planning without disability income protection does not lead to a secure future, so how can brokers get the attention of their clients who are unaware of the need for disability income protection?
Did you know your clients are 3x more likely to become disabled then to die during their working years?


Ecto is a collaborative personal learning environment that transforms the wired classroom into an interactive, collaborative, and student-centered classroom — the very definition of a modern learning environment. Any member of Ecto (students, teachers, publishers) can create and share content. Ecto gives you the power to connect classrooms across the hall, across town and across the globe.
This short video presents an overview of some of the features of EctoLearning as well as some examples of how teachers and students are using Ecto to improve learning.


Dr. Kenneth Christopher is Associate Professor and Academic Program Director for the B.S. in Homeland Security and Emergency Management at National University. He was previously Associate Vice President for Academic Affairs and a member of the Criminal Justice faculty at Park University in Parkville, Missouri. He has held teaching positions at Lynn University in Boca Raton, Florida and St. Thomas University, Miami, Florida.
Dr. Christopher completed his Doctor of Public Administration at Nova Southeastern University, Fort Lauderdale, Florida. He holds a Master of Public Administration from Florida International University and a Bachelor of Science in Criminal Justice from the University of Dayton. He is a graduate of the Administrative Officers Management Program at North Carolina State University and the Executive Contemporary Education for Leadership Program at the University of Miami.
Prior to his work in higher education, Dr. Christopher served 26 years in law enforcement, completing service as a Captain with the Miami-Dade Police Department and as Chief of Seaport Security Enforcement of the Port of Miami, Florida. His police experience includes patrol, media relations, team policing, contract management, forfeiture and auctions of seized property, planning and research, training, special events, transportation and seaport security.
Dr. Christopher has worked with the U.S. Maritime Administration and the Organization of American States in the Inter-American Port Security Training Programs in Barbados and Jamaica. He has consulted on and developed educational programs and curricula in seaport security, criminal justice administration, security administration, terrorism and domestic preparedness, community safety, police management and organizational behavior. He was a member of a faculty-led, US State Department-funded interdisciplinary Peace Journalism/Anti-Terrorism education program in Uganda. His research interests include cooperative leadership strategies for port security management and convergence of business and security technologies for seaports. He is producing a series of educational podcasts for homeland security interviewing subject matter experts in information technology, security design, corporate and transportation security. He is the author of the book Port Security Management published by CRC Press.
Dr. Christopher is a Certified Protection Professional by the American Society for Industrial Security (ASIS)-International and is an invited speaker at national and international conferences on maritime and homeland security, including SecurePort, the Institute for Defense and Government Advancement, Maritime Security Outlook, the MacDonnell Group and ASIS-International's Asia-Pacific Security Conference.
Christopher, K. (2010). Kansas Business and Industry Forum Stresses the Value of Private Sector-Government Partnerships in Disaster Response and Recovery. ASIS International Greater Kansas City Newsletter,, 9: 6.
Christopher, K. (n.d.). Port Security Management, 2nd Ed,.
Christopher, K. (2015). Criminal Justice Education Competencies for a Global Perspective. Criminology and Criminal Justice for the Curious: Why Study Criminology and Criminal Justice? Kishor Vaidya, Ed..
Christopher, K. (2018). . Recommendations from the Front: CAEL Assessors share best practices in portfolio assessment. Panel Discussant. Conference presented at the Council of Adult and Experiential Learning, International Conference, Cleveland, OH.
Christopher, K. (2018). Jobs and Internships Special Interest Group. Panel Discussant. Conference presented at the 20th Annual Emergency Management Higher Education Symposium, Federal Emergency Management Agency, National Emergency Training Center, Emmitsburg, MD.
Christopher, K. (2018). Internships for Nontraditional Students: Blended Homeland Security and Emergency Management Programs. Paper presented at the 20th Annual Emergency Management Higher Education Symposium, Federal Emergency Management Agency, National Emergency Training Center, Emmitsburg, MD.
Christopher, K. (2018). Automate General Research Information Collection With These Two Free Tools. Roundtable Discussant. Conference presented at the Academy of Criminal Justice Sciences, Annual Meeting, New Orleans, LA.
Christopher, K. (2018). Resources and Techniques for Engaging Students in Asynchronous Criminal Justice and Security Education. Roundtable Discussant. Conference presented at the Academy of Criminal Justice Sciences, Annual Meeting, New Orleans, LA.


Yeah! I'm chewing my way through projects at the workshop. I'd love to be making progress faster but my goodness I will accept just moving forward as a success!
What have I got for you this week? Let's have a look. I'm finally getting some perfect casts with the Malechai heads. Finally.
Dude that doesn't look perfect. Well of course it doesn't. The crud you see at the top of his forehead there is a bubble-trap. I had to make an extra-large one there because this resin hardens so crazily fast that I have to provide extra room for the bubbles to go. They just can't escape the mould before the goo hardens. The blips on his ears are also bubble-traps. There's a bit of flash in his eye-holes and along his jawline but this is quite normal. It just gets sanded off. Flash happens when a bit of resin leaks in between the two halves of the mould.
The important thing is: no bubbles are present in any of the parts we care about. Just the bits that get cut off.
We also have a Sariel on the go! Working away at getting that first prototype mould done.
Looks like a tasty sandwich of … actually, ew. No I wouldn't eat that. Anyway. I've gotten the thing flipped over, all the clay cleaned off the latex, re-balanced on the foam board, and the "box" re-constructed around it. Also got some mould wax (separating agent) painted all over it so the latex shouldn't stick to the other latex when I put it in. Hopefully this method will work out okay and I'll be able to bring you more sword styles at a lower cost.
Speaking of lower costs! I'm working out some new ideas for making prototypes and putting out new styles for you guys. Here's my chief problem right now: money. Silicone is craaaazy expensive but it's something I can't do without. The mother moulds that will create each beautiful sword that appears on my Etsy shop has to be made of high-quality silicone or it will end up breaking down in a few months and I'll have to make a new one. That's not only a waste of money but it's terrible for the environment! Resin is a bit cheaper than silicone but it's still not just pocket change. Every mistake I make costs me money. Usually a lot of it.
My vacuum pump is limping along, slowly dying (because I'm an idiot and put the wrong kind of oil in it for a few months) while I try to work up the funds to replace it. My electric cooler is also dying a horrible noisy death. I've had to use it every day to keep my food cool because somebody on my floor keeps stealing my food from the break-room fridge. This leaves me without any lunch. 😦 There is nowhere nearby to buy grocery food, not to mention that, well, having a really tight budget means I can't just eat at a restaurant or buy my lunch every day. So I've had to force my poor little cooler to work much harder than it was ever designed to do.
I've already had to downsize my workshop by more than half and now I have to carry water in from the bathroom because there's no faucet and sink in my new room. I cannot work in any smaller space than this. I don't have enough space to work on three projects at once. This means sitting, wasting time watching glue/paint/resin dry. I feel the squeeze guys. I really feel it. I'm doing my best to keep on working and making cool stuff, trying not to use "disposable" plastics or Styrofoam (which is cheaper but horrible for the environment), and keeping the quality of my products top-notch while still being affordable. It's not easy.
Where does that put us in terms of getting cool swords (and now dolls!) into your hands? Well, I'm at the point where I need to sell swords in order to be able to afford the materials to make more swords. There's a bunch of people who want swords, but they're not interested in the Clariel model. Some want Gabriel, some want Sariel, some want Jahoel, and some even want a Michael. I want to make them! You want me to make them! Yes! So what we need to do is somehow get all the people together who want the same model of sword and get the project funded.
That … sounds like a Kickstarter! Ooooh. Could I? Should I? If I can just get the darn moulds made, making the actual swords is not so hard. I've already got lots of experience with that! But the funding … it's so expensive for just one person alone to fund the project. Right now that one person, alone, funding each sword project is me. We've got to fix that so I can make some headway.
Author Ethan KincaidPosted on October 29, 2018 Categories Arts & Crafts, Ball Jointed Dolls, News & Promotions, ShadowhuntersTags Ball Jointed Doll, Creative Process, Kickstarter, Malechai, Mould Making, Sariel, Seraph Blades, Shadowhunter Sword, Shadowhunters, The Mortal InstrumentsLeave a comment on Get 'r Done!
Just a wee update this morning to show you what I'm working on this week.
It's Sariel! Inspired by Isabelle's glorious two-handed sword from the Mortal Instruments movie. 🙂 I've got all the initial carving done and the holes all patched up. (This insulation seems to have a lot of voids in it for some reason.) Now I just need to sand it and apply several layers of sealing on it before I can do the first moulding.
I'm hoping to have these available in time for Christmas. Wish me luck!
Author Ethan KincaidPosted on October 8, 2018 Categories Arts & Crafts, News & Promotions, ShadowhuntersTags Creative Process, Isabelle Lightwood, Isabelle's Sword, Sariel, Seraph Blade for Sale, Seraph Blades, Shadowhunters, The Mortal Instruments1 Comment on Longswords Anyone?
Hi guys! In spite of the heat, I'm still trying to get stuff done. I managed to get most of the way finished one of the Clariel swords on my table. It just needs its protective glossy sealant and the strap around the handle.
That's a handle made of Milliput. Milliput is a two-part epoxy paste. You smoosh it together, knead it thoroughly, and do whatever it is you want to do with it. It's a lot like modelling clay in consistency. After 3-4 hours it sets hard as a rock. Much more solid and robust than the polymer air-dry clay I've been using before.
The downside to Milliput is that because it's so much harder, it takes longer to shape, sand and polish. The paste is stiffer and harder to mould than softer clays so I have to do some shaping with the Dremel tool after it's set and then sand those tool marks away before I can begin polishing. It's also harder to engrave. It's also a bit more expensive than the air-dry polymer clay.
In addition, any patching of gaps or fine details that I want to do with the Polymer clay (which is softer and easier to accomplish these things with) has to be done after polishing the Milliput. Milliput is hard enough that I have to wet-sand it to smooth and polish it if I want to work with any kind of speed. But the air-dry polymer clay softens with water and can become crumbly before its had its protective coats of paint and sealer put on it.
So the procedure has to go like: Mould handle with Milliput. Wait 4 hours. Shape with Dremel. Wet-sanding. Install leather flap for the light cavity. Smooth over any seam-lines with polymer clay. Dry-sanding. Install magnet closures. Engrave. Paint. Paint. Paint. Seal.
Do I like this procedure? Uhh … I'm still working on tinkering with it. But I do like the structural hardness of the Milliput and will definitely be keeping it on hand for anything that needs reinforcement. I totally recommend getting some to play with. It's fun!
Here's a different style of Milliput handle I also tried out. I wanted it to be all one piece so I could slide it on and off the sword to change the light battery when needed. Buuuut Milliput bonds with resin. On the one hand: that's great! I can put stuff on my swords and be 100% sure it's not going to come off. On the other hand: I wanted it to come off.
I even put a layer of liquid latex all over the handle before I started moulding the Milliput on. But Milliput forms itself absolutely perfectly to the object you're sticking it on, so it formed an air-tight suction seal that I couldn't pull free. I had to cut out a section of the front to do a conventional leather-flap for the light cavity.
Of course that broke the suction seal. And it came off just like I originally wanted to but far too late. I had already altered the design by slicing a section out of the front. GAH! That was a frustrating day guys!
Okay, so, it's really freaking hot in my workshop. Still. It's been a couple weeks or so of 30C, in Finland. What the crap?! I didn't move within spitting distance of the Arctic Circle for this garbage! Rawr!
I'm going slightly bonkers. Still trying to get work done. Somehow. I stand directly in front of the fan and wear a cooling vest so I don't lose quite as much water via sweat but it's a daily struggle. Just trying to keep my head clear enough to work without messing things up. Gah!
How to hide the electronics inside a transparent substance?
How to make the electronics as small as possible?
How to conceal the on-off switch?
How will it open and close?
How can I keep costs as low as possible so people can afford them while still managing to pay rent on my workshop?
How do the Iron Sisters work in a freaking volcano when I can't even concentrate at 30C?
All this and more on the next episode of What the Crap am I Doing?! Stay tuned.
Author Ethan KincaidPosted on July 30, 2018 Categories Arts & Crafts, News & Promotions, ShadowhuntersTags Creative Process, Seraph Blades, Shadowhunter Cosplay, Shadowhunters, The Mortal Instruments, WitchlightLeave a comment on I'm Melting!
Whoa! Dude! What happened to the site? Don't panic guys; I changed my logo. Everything's still here.
I took a recommendation from a friend to check out Turbo Gold Media to get my very own logo designed for me. I liked the work they did on her logo so much that I decided to give it a whirl. I was immensely pleased with their services and I found their prices to be quite reasonable for the quality I got. They're very quick and responsive and took my feedback seriously.
I felt the need to change my logo because the old one didn't really fit the direction my company was going. Originally, it was my plan to make a career of both writing novels and making cool costume props. Well, it turns out that making costume props is a heck of a lot more work than I thought and takes almost all the energy and time I have and I still don't get everything done that I need to. On top of that … well … books just don't sell. I don't really care about worldly riches but I do need to eat and pay rent.
So, yes I still write, but it's a hobby now. It was a brutally difficult decision to make but I had to be real with myself and admit that it was time to adjust my priorities. Maybe once I can afford to hire an employee or two to help me out and I don't have to do everything myself, writing will be able to take a bigger role in my life. Until then, I need to focus on improving my prop-making business and get a stable income so things aren't so financially tight for me.
Running a company is hard guys!
Enough yammering about my new pretty picture! What's up in the workshop? Well! I had a crazy failure in casting a couple of swords. I think the resin got contaminated or is a little too old or quite possibly the heat/humidity is too high in my workshop right now. It's 30 degrees Celsius and because there is no air conditioning, I have no way to bring the temperature down.
Either way, I had this bizarre snowflake-pattern delamination on two swords.
Now, that would be rather cool if it was what I was going for, but since I wanted crystal clear and perfectly smooth … nope. Bad news for me. 😦 As you can see (maybe) there's a bajillion little bubbles there and each one has flaky resin coming up around it in a flower/snowflake pattern. Boo!
What to do? I didn't want to waste all that resin. So I sanded the swords as best I could manage to get alllll those little air bubbles and flakes off the surface. I got it as smooth as I could and then tried something weird: I mixed some glazing resin (the stuff you normally use to seal a painting or piece of wooden furniture) and carefully dribbled it down the sides of one of the swords until it was completely coated and left it hanging to dry.
It was an unconventional solution to be sure, but desperate times call for desperate measures. Either it would work and the sword would be saved, or I would have to admit defeat and throw it away. And you know how crazy I get over wasted plastics!
Why did I never think to do this before!? That is the clearest, smoothest, most pristine finish I have ever been able to get on a sword EVER. I cannot wait to get back to the workshop today to handle it and inspect it now that it's all cured.
What do you guys think of it? I mean … this is more than crystal clear. It looks like a liquid that just decided to hold the shape of a sword! Should I offer this option as a possible finish you could choose for your blade? What should I call it? Ahhhh I'm so excited! I gotta go to the workshop now and give this beauty a handle!
Author Ethan KincaidPosted on July 23, 2018 July 23, 2018 Categories Arts & Crafts, News & Promotions, ShadowhuntersTags Accidental Awesome, Cassandra Clare, Crafting, Creative Process, Seraph Blades, Shadowhunter Cosplay, Shadowhunter Sword, Shadowhunters, The Mortal Instruments2 Comments on A New Look!
So I'm back from Estonia! I don't think I mentioned I was going on vacation. Sorry. I was so excited to visit Tallinn for the first time that I just kind of ran out the door.
I finished off another lovely Clariel sword. It arrived in Germany safe and sound and now has a loving home.
I'd like to take a brief moment to talk about my packaging methods just in case anyone is curious. My blades are always packaged in materials that are bio-degradable, recyclable, or re-usable because I am committed to making my company as eco-friendly as possible.
When you open your package, you will find unbleached brown paper used for filling voids in the box (so the contents don't rattle around inside). The sword is wrapped snugly in a fleece baby blanket, all tied securely with a ribbon. The colours of the blanket and ribbon may vary but my wrapping method is always the same.
Even though I work with plastics and craft things with plastics, I don't want any plastic waste products. The way I see it: you'll want to keep the sword forever, but not the packaging. So why should the packaging last forever? It shouldn't! It should go back into the earth and continue the natural cycle of the environment.
Okay, enough jabber about tree-hugging stuff LOL! What's up for this week? Well, I made a new mould jacket for my Clariel mould annnd … it doesn't quite fit snugly enough so I have to trim it down a bit. I have to go find out how badly it leaked. Not looking forward to it. Yuck. But at least I had it wrapped up in plastic just in case it failed so it didn't go all over the floor. It shouldn't take too long to fix. Hopefully. Wish me luck!


This project describes how to recognize certain types of human physical activities using acceleration data generated from the ADXL345 accelerometer connected to the Intel Edison board.
I have also published this project on the Intel Developer Zone site.
The project covers how to determine the training parameters of the classifier using a grid search and running the classifier to be able to accurately predict various activities using LIBSVM in both Python and node.js.


text:
Dagestani love
adjective Of, or pertaining to, Dagestan
noun Someone from Dagestan
Just Wednesday night, four people died and six were injured when a car bomb blew up outside a cafe in the Dagestani town of Khasavyurt, the Interfax news service reported Thursday.
Moscow police seek possible suspect in airport bombing, reports say
From there, the range curves down into Azerbaijan, ending near the coast, south of the ancient Dagestani port of Derbent.
Meanwhile, on September 4, terrorists exploded a car bomb beside an apartment building in the Dagestani city of Buinaksk, not far from the conflict, killing sixty-eight people.
Carlos made his debut with Anzhi earlier this month – in Grozny, where the game was held because the Dagestani capital was deemed too dangerous.
Chechnya's hardman Ramzan Kadyrov hires football big guns to take the offensive against Russian giant
FC Anzhi Makhachkala was bought in January by Suleiman Kerimov, a Dagestani estimated to be worth $7.8bn by Forbes, making him the 19th richest man in Russia and 118th richest in the world.

redpajama_set_name: RedPajamaCommonCrawl


I have ultimately migrated from b2 to WordPress! But I was terribly bruised in the process!
Nevertheless it is worth the pain since WordPress is such a wonderful piece of blogging software. Though it was a fork of b2, it has been thoroughly re-coded from bottom up.


text:
The Chelyabinsk Superbolide Content from the guide to life, the universe and everything
The Chelyabinsk Superbolide
Created Apr 29, 2014 | Updated Apr 29, 2014
1 Conversation
On 15 February, 2013, astronomers were expecting an asteroid called 367943 Duende to scoot past planet Earth. However, the impending close encounter hardly garnered any press attention at all. Unfortunately the asteroid chose the wrong day for its fly-by, as the world's attention was distracted by a huge explosion over the city of Chelyabinsk in Russia. This was a close encounter of a different kind, and it was serendipitously captured for posterity thanks to Russian drivers' dashcams1.
What began as an otherwise-normal day for Chelyabinsk's million-plus citizens soon turned into an unforgettable one as a once-in-a-lifetime event unfolded. The sky was cloudy at 9.20am local time when there was a sudden glare which became a blinding flash. It arced across the sky at 18km/s from eastern horizon to west as people, who thought they were under attack2, ran for cover. When the spectacular flare faded, smoke trails could be seen. As people stared and wondered what they had just witnessed, a shockwave hit their city, blowing out over 100,000 windows. One factory's roof caved in and a wall collapsed. About 1,000 people were injured, mostly by glass cuts, but most astonishingly amidst all the chaos, no-one was killed. What could have caused this shocking event?
Superbolide
The Earth resides in a cosmic shooting gallery. Our planet is being bombarded by space rocks all the time; we just don't notice most of them. Occasionally a comet will cause a fuss and we have regular meteor showers to look forward to. Once in a blue moon an event will occur like the Tunguska Incident of 1908, but thankfully they are rare. The space rock that shocked the citizens of Chelyabinsk was an Apollo-class3 asteroid which became a bolide (an especially-bright exploding fireball). It was so spectacular that it earned the name superbolide, as it surpassed magnitude -17. What was originally just a lump of rock was heated up by friction with the Earth's atmosphere to the point that it exploded while it was still 23,300m above the Earth. The explosion was measured at roughly 90 kilotons; that's six times the power of the atomic bomb which exploded above the city of Hiroshima, Japan, during World War II.
Caught on Cams
Thanks to most of the drivers in Russia having dashcams to record traffic incidents for later insurance claims, the superbolide was recorded from the moment it appeared above their city. Those with the technical savvy uploaded what they had captured onto the Internet; within minutes the images had spread around the world. Round-the-clock news programmes showed video footage of the entire breathtaking event on television, a journalistic dream. But near-Earth object scientists must have been the happiest people on the planet as for the first time in history they were able to study video to reconstruct the angle and path of the superbolide, and estimate its size (over 17m at its widest point) and mass (10,000 tons).
Close but no Cigar
16 hours after the Chelyabinsk impact, a 30m lump of rock with a mass of 40,000 tons, which astronomers had been expecting, shot past the Earth within the orbit of our communication satellites. Those who knew about this event breathed a huge sigh of relief. We dodged a bullet this time, as asteroid 367943 Duende is much bigger than the Chelyabinsk superbolide, and would do correspondingly more damage. Astronomers knew that it would not collide with the Earth this time round, but it was still good to see it receding into the distance. Remarkably, although both of these rare asteroid events occurred on the same day, they weren't related to each other. It was just a cosmic coincidence.
Meteorite Hunt
A meteorite is a piece of space rock that makes it as far as the ground. When the superbolide exploded, much of it was vaporised, but hopes were high that large chunks of it might be found scattered around Chelyabinsk. In the right market meteorites are more precious than gold, so there were plenty of prospectors out looking for fragments. Luckily it was winter so not only was snow on the ground, there were frozen lakes too. One such, Chebarkul Lake, had a 6m-wide hole in it; scientists were hopeful that a large chunk of meteorite could be located there. The lake was dredged and a 1.5m-long portion of the Chelyabinsk impactor, weighing more than 570kg (that's when the scales broke) was recovered.
Meteorite Medals
Recovered fragments of the Chelyabinsk meteorite were crafted into special commemorative medals, seven of which were presented to Gold Medal winners on the first anniversary of the impact event, 15 February, 2014, at the Winter Olympics in Sochi, Russia. One of the lucky recipients was Great Britain's Lizzy Yarnold, who won the women's Skeleton event.
Monitoring systems are in place to alert us to near-Earth objects. People can keep a watch for themselves on the daily-updated Spaceweather.com, which displays the Potentially Hazardous Asteroids (space rocks that come close to the Earth). At the time of writing they have logged over 1,500 PHAs, the smallest being 20m in length, the largest, 1.8km. These are the ones they know about, and none of them are on a collision course with the Earth; they're just in the vicinity.
So how much damage could one of these rocks do? The Chelyabinsk superbolide broke 100,000 windows. The Tunguska incident of 1908 knocked down 80 million trees over an area of 2,000 square kilometres. At the moment there is no technology which would enable us to protect our planet from an asteroid hit, even if we knew about it in advance. All we could do is evacuate the projected strike area, if the authorities had enough warning. Unfortunately, we might not get much notice. On New Year's Day 2014, an asteroid, 2014 AA, was discovered by the Mount Lemmon Survey (whose job it is to detect NEOs). The following day it entered the Earth's atmosphere and what remained plunged into the ocean somewhere between West Africa and Central America. Thankfully the asteroid was only 3-4m in diameter.
Many people believe that the extinction of the dinosaurs might have been caused by a strike by a really big asteroid at Yucatan, Mexico, although we can't know for sure. The effect of such a collision would be a catastrophe affecting the whole world. There are many Near Earth Objects out there. We can only hope one of the biggies doesn't have our planet's name on it.
1Dashboard-mounted webcams.2One politician, leader of the Liberal Democratic Party Vladimir Zhirinovsky, accused Americans of testing a new weapon.3Apollo-class asteroids are ones whose orbit crosses the Earth's and could at some point collide with our planet.
Bookmark on your Personal Space
Conversations About This Entry
Sign in to start a conversation
This is a fantastic article
Edited Entry
Infinite Improbability Drive
Read a random Edited Entry
The Earth > Europe > Russia
The Solar System > Near Earth Objects
Galaxy Babe - eclectic editor
Fwr
SashaQ - happysad
h2g2 Editors
h2g2 Entries
The Tunguska Incident
What's the Point of Astronomy?
Asteroids and Meteorites - Mankind's Fate?
Stellar Magnitudes
Meteors, Meteorites and Meteor Showers
The K-T Boundary Extinction Event
Asteroids, Comets, and Meteors - Clearing Up Confusion
How to Make a Hole in the Ice
Near-Earth Objects
Dinosaurs - An Introduction
Enola Gay and the Bombing of Hiroshima
Japanese History and Culture
The Snowflake - Nature's Masterpiece
Some Cold, Hard Facts About Ice
A Brief History of Manufacturing Glass for Windows
Amazing Comets and their Impact
APOD: Chelyabinsk meteor flash
Space.com: Winter Olympic Gold Medalists to Get Bonus Meteorite Medal Saturday
Potentially Hazardous Asteroids
Not Panicking Ltd is not responsible for the content of external internet sites
The Life and Works of Emily Bronte
The Execution of Private Eddie Slovik: A Story from the Second World War
The Vertical Plane: A Tale of Poltergeists, Time Slippage, and Talkative Tachyons
Redshanks - Wading Birds with Red Shanks
Damnatio memoriae: Cancel Culture Through the Millennia
The Ultimate DreamWorks Animated Film Guide: 2015-2019
Helen Keller Plays the Palace: A Vaudeville Story
The Life and Works of Anne Bronte
'Fairytale of New York' - Festive or Offensive?
Watching 'Winterset': Blank Verse, Gangsters, and Political History


NASHVILLE, Tenn., Jan 09, 2019 (GLOBE NEWSWIRE via COMTEX) -- Truxton Trust (otcpk:TRUX) announced that M. Shannon Buckner, CFP(R), CTFA, has joined the firm as Senior Vice President and Senior Wealth Advisor, bringing over 24 years of experience. Shannon joined Truxton Trust from SunTrust Bank Private Wealth Management, where he served as Trust Advisor and First Vice President.
Shannon has earned degrees from Freed-Hardeman University, Belmont University, and the American Bankers Association Trust Graduate School. He is a past board member of the Financial Planning Association of Middle Tennessee and member of the Middle Tennessee Estate Planning Council. He is a two-time U.S. Presidential Volunteer Service Award winner for his service to organizations including the American Red Cross, Best Buddies of Middle Tennessee, and the Susan G. Komen Foundation.
Derrick Jones, Senior Managing Director and Chief Fiduciary Officer, said, "Shannon has a 24-year proven track record of success in helping wealthy individuals and families. He is a great addition to our team of wealth advisors who are the best at what they do, and our clients deserve the very best." Jones continued, "Shannon has an extraordinary passion for serving clients and extensive expertise."


text:
Craig Campbell Delivers A Solid Performance
Posted bycountrymusicrocks	 October 23, 2012 November 21, 2012
Craig Campbell is well known as one of country music's favorite "Family Man" since the release of his debut single in 2010. Since then Campbell has delivered catchy songs that fans have enjoyed including his latest, "Outta My Head", which will be on his forthcoming album.
Country Radio station 98.7 KUPL brought in Craig Campbell to rock Duke's Bar & Grill. Campbell kicked off his performance with "Party For A Living", and immediately set the tone that a party was in fact ahead for the evening. Craig had a set list full of songs that fans enjoyed including his hit singles "When I Get It", "Fish" and debut single "Family Man". Campbell's "Family Man" may have been released in 2010, but it still resonates with fans as they sang along with him word for word. Campbell is gearing up to release his sophomore album and performed his brand new single "Outta My Head". It appeared that fans have already embraced the new song as they enjoyed singing ♫Yeah – Yeah♫ along with him. Craig also treated fans to additional songs that will be released on his new album. Based on the enthusiastic response from the crowd, the new album is going to be a hit.
If you haven't had a chance to see Craig Campbell in concert, you should definitely see if he is performing at an area near you. Check out his complete tour schedule by clicking HERE. See more photos from Craig's performance on our Facebook page by clicking HERE.
Be sure to contact your local radio station and request Craig Campbell's new single "Outta My Head". Pick up your copy now on iTunes by clicking HERE. Keep up with Craig by visiting his Official Website, Like him on Facebook and Follow him on Twitter.
Posted bycountrymusicrocks October 23, 2012 November 21, 2012 Posted inCMR MUSIC REVIEWS, Craig CampbellTags: CMR Concert Reviews, Craig Campbell
Miranda Lambert And Dierks Bentley Announce Their "Locked & Reloaded" Tour
Tim McGraw And Faith Hill To Perform On The CMA Music Awards


text:
Open Shelf Editor
This author has written 1091 articles
Home » Open Shelf Editor
What's involved with being an editor for a multiauthor volume?
Sharing our professional knowledge and experience through writing is something we value collectively as a profession. We have found that being the editor (or editors) on a collaborative project is a meaningful way to contribute to the literature related to our work and research in addition to strengthening our professional skillset(s).
793.73: February double header
To kick off this exciting crossword feature, we present our readers with two puzzles: a "crossward" commemorating Black History Month and celebrating black authors, and a devilishly difficult and cold-themed "cryptic crossword" puzzle.
793.73 (cryptic crosswords), Columns
Team up: Opportunities for writing collaborations
Interested writers have the opportunity to co-author articles with an Open Shelf regular contributor, a member of our editorial team, or another volunteer who is looking for a writing partner.
< Code of conduct/ >: Call for coding stories
These days, library staff in many departments have an interest in related issues, including coding. Pitch us your coding story ideas about HTML, Twine, Python, Jupyter Notebook and more.
Madelaina DePace
Madelaina DePace is a cataloguer for the Thames Valley District School Board in London, and previously worked cataloguing derived records at the University of…
Tiffany Ribeiro
Tiffany Ribeiro has been a Circulation and News Technician at the Ontario Legislative Library for three-and-a-half years after graduating from Seneca College's Library and…
Sara Holder
Sara Holder is Associate Professor and Head of Research and Information Services at the University of Illinois at Urbana-Champaign Library. Prior to joining the…
What's new in Open Shelf: December 2020
Dear Santa, We're the Open Shelf editorial team. Our favourite things to do are to engage with our friends in the OLA community. We write, we provide feedback, we get creative with pictures and tweets, we play tag all the time, and just basically have lots of fun. We'll be snuggled at home during the holiday season, hopefully taking a break from work but still dreaming of new stories we can tell in Open Shelf in 2021. Although this has been a crazy year—the "Year of COVID"—we've still been able to play with our Open Shelf contributors and they have sent us lots of great stories to print in the magazine.
What's New in Open Shelf?
A sadder wiser boy: World War II letter sheds light on human resilience
While many of us couldn't join others in a formal university ceremony on Remembrance Day, first-hand accounts of war-time events (e.g., archival letters) can help us all "apprehend the complexities of the human condition" that are central to our collective memory.
From the editor: Time for a 1% change
1% daily improvement or, have big dreams, set big goals, and then do a little bit everyday to make these dreams and goals a reality". Chris Nikic's approach to athletic training is clearly a good one, for triathletes as well as editorial teams.
Memespiration: What do you want from Santa?
With the winter season on the horizon, those of us in academic libraries are well into the "final assignment" season and answering research questions such as, "Can you check my citations?"
Memespiration
L'Université de l'Ontario français : repenser la bibliothèque universitaire?
Après une longue attente, la nouvelle Université de l'Ontario français (UOF) accueillera enfin sa première cohorte d'étudiant.es en septembre 2021. Malgré tout le travail accompli, il reste encore beaucoup à faire.
Features, Publications en Français
Needs-based public libraries
The thinking of Comrade F. Dobler from the early 20th century remains relevant and even prescient: those who need open access to information may be those who are fundamentally excluded from public libraries.
Open for All?
793.73: Quotable creeps
Does your library carry video games?
If so, how often do you add new items to your collection?
Very Often
Every So often
Almost Never
Bird's Eye: A view of OLA
Subscribe to Library Land Loves, the OLA podcast!
A bilingual resource hub for library professionals / Un carrefour bilingue pour les professionnels en bibliothéconomie
What's new in Open Shelf: Subscribe
Columns, Features & Editorials
Columns, Features & Editorials Select Category 793.73 (cryptic crosswords) Access Points Advertising April Special Issue B-roll Becoming University of Toronto Music Library Bird's Eye Canvas[s]OLA CLA Copyright Committee Columns Contributors culture@work Due North Editorial Features From discord to discourse From the Editor From the OLA President Game on! Genealogy 101 High 5 Incidentally Indigenous voices InsideOCULA InsideOCULA Editor's Message It's Elementary: Thoughts About School Libraries Keeping Current LGBTQ+ Library Lexique Limited Series Market Share Memespiration More Than Just Books New Librarians Symposium OHLIA Consumer Health Reports OLA Staff Room OLITA On the Edge: YA Fiction On the Verge Open for All? Picturebooks to heal the heart Policy Wonk Publications en Français Random Library Generator Readers' Advisory Red Sea Dispatches Reprint: Stories from Access Research for Practice Road less travelled Safe spaces Sonification Special Issue Special Issues Technical Expertise The Interview The Library IT Crowd Trees and Forests Trendz Uncategorized What is a library? What's New in Open Shelf? Wildcard* Word of the Month/Mots du mois
Archives Select Month January 2023 (2) November 2022 (1) September 2022 (1) August 2022 (2) October 2021 (13) September 2021 (15) July 2021 (8) June 2021 (17) May 2021 (11) April 2021 (12) March 2021 (2) February 2021 (11) January 2021 (1) December 2020 (23) November 2020 (12) October 2020 (26) September 2020 (15) July 2020 (18) June 2020 (3) May 2020 (19) April 2020 (18) March 2020 (15) February 2020 (18) January 2020 (2) December 2019 (21) November 2019 (14) October 2019 (17) September 2019 (12) July 2019 (12) June 2019 (12) May 2019 (19) April 2019 (17) March 2019 (21) February 2019 (20) January 2019 (9) December 2018 (21) November 2018 (31) October 2018 (16) September 2018 (11) August 2018 (1) July 2018 (18) June 2018 (1) May 2018 (21) April 2018 (21) March 2018 (10) February 2018 (22) January 2018 (5) December 2017 (16) November 2017 (18) September 2017 (7) August 2017 (5) July 2017 (26) June 2017 (8) May 2017 (10) April 2017 (27) March 2017 (22) February 2017 (25) January 2017 (6) December 2016 (21) November 2016 (21) October 2016 (22) September 2016 (27) August 2016 (3) July 2016 (28) June 2016 (8) May 2016 (15) April 2016 (39) March 2016 (21) February 2016 (27) January 2016 (10) December 2015 (11) November 2015 (27) October 2015 (25) September 2015 (19) August 2015 (2) July 2015 (20) June 2015 (23) May 2015 (23) April 2015 (28) March 2015 (25) February 2015 (26) January 2015 (10) December 2014 (12) November 2014 (22) October 2014 (17) September 2014 (25) August 2014 (18) July 2014 (14) April 2014 (22) December 2013 (14) September 2013 (16) June 2013 (1) May 2013 (16) January 2013 (8) December 2012 (7)


text:
When Donald Trump Owned a Football Team
From savior to destroyer
Donald Trump (right) at the February 1985 signing ceremony that brought Heisman Trophy winner Doug Flutie, center, to his New Jersey Generals. Team's head coach, Walt Michaels, is on the left.
Posted Sunday, November 20, 2022 8:00 am
Before he became America's 45th Commander-in-Chief, Donald Trump was many things in the business world, including owner of the New Jersey Generals, a football franchise that played in the upstart United States Football League (USFL).
Already a real estate mogul in New York City, the future President was now chasing the next big thing with a foray into professional football.
Over the next two years, his brief tenure in the USFL would have all the makings of a quintessential 'Trumpian' story: hardball business tactics sprinkled with media glitz and topped with courtroom drama.
BUY- 1984 USFL Generals Herschel Walker Topps trading card
The brainchild of New Orleans businessman David Dixon, the USFL was conceived as a Spring football league that would exploit the popularity of the sport with a season lasting from March to June. Dixon sold the idea as a perfect complement to the Fall schedule of the long-established NFL.
Packed with promising gridiron talent and a nascent following, the 12-team organization made a splash when it launched in 1983. Averaging 25,000 fans per game in its inaugural season, the fledgling league caught the eye of 37-year-old Trump who saw the potential behind the numbers.
In September of 1983, he purchased the New Jersey Generals from J. Walter Duncan, an Oklahoma oil & gas man who got tired of traveling east to watch his team play. With an investment of less than $10 million, Trump was now inside the board room of a professional football franchise.
But it wasn't the league he was coveting. Trump dreamt big and wanted to be in the NFL.
Chet Simmons, veteran executive at ABC and President of ESPN, became the first commissioner of the USFL and the league managed to secure $13 million in broadcasting contracts with ABC and ESPN in its first year of play, or roughly $1.1 million per team.
To increase their fan base and expand TV coverage, owners knew they needed high caliber players but they were limited by the $1.8 million team salary cap outlined in the Dixon blueprint. Almost from the beginning, the group breached its own financial guidelines as teams went on binging sprees to recruit college players and lure existing ones from the NFL.
Between 1983 and 1985, they signed up 3 Heisman Trophy winners- Herschel Walker (Georgia), Mike Rozier (Nebraska) and Doug Flutie (Boston College). BYU quarterback Steve Young landed a record 10-year, $40 million contract with the Los Angeles Express, which he agreed to collect in $1 million annuity payments over 40 years to help out with the new team.
From the NFL, the USFL reeled in Cliff Stoudt (Steelers), Doug Williams (Buccaneers), Brian Sipe (Browns), and many others.
But behind the scenes, the league was suffering from more than just unfettered spending. Poor planning and mismanagement had some owners still searching for stadium leases, while others ran out of money quickly and couldn't pay their players. Teams were sold, moved to other cities, or just discontinued.
If you shop on Amazon, support us at SPORTS HISTORY WEEKLY by clicking here and surfing for ANY of your personal and household needs
Initially, Trump was regarded by insiders as a savior when he entered the USFL with all the glamor and hype he could inhale from the media and exhale back to the tabloid-consuming public.
He announced his takeover of the Generals at the newly-completed Trump Tower on 5th avenue, the 58-story glass building that would see a parade of athletes, executives and government officials stream in and out right through to his Presidency.
When he sought out former Dolphins coach Don Shula for the Generals, Shula wanted a rent-free apartment in Trump Tower as part of his package. Trump refused and Shula was never hired, though other circumstances played in as well.
It was also at the posh building address that the Generals held their cheerleading tryouts with Donald's first wife, Ivana Trump, and Andy Warhol sitting among the judges panel.
BUY- 1985 USFL Express Steve Young Topps trading card
Players loved him and the NFL feared him. Lawrence Taylor, an underpaid star linebacker for the New York Giants, ended up tripling his salary with the Giants after Trump signed him to a future contract with the Generals, only to sell him back to the Giants for a $750,000 fee that Trump collected for himself.
The deal raised the credibility of the USFL and sent shivers through the NFL organization. On the field, Trump's team was doing well. In 1985, they went 14-4 compared to the previous year's record when they posted 6-12 under Duncan's stewardship.
But for "The Donald", the USFL was merely a ticket to something larger. He wanted to take on the NFL in their own calendar schedule, or force a merger between the two leagues that would end up doubling or tripling the value of his investment.
Trump remarked to ABC, "If God wanted football in the Spring, he wouldn't have created baseball". By the summer of 1984, he and a few other owners in the USFL convinced a reluctant majority to abandon the Spring playing schedule and move to the Fall starting in 1986.
Do you shop on Amazon? Support us at SPORTS HISTORY WEEKLY by clicking here and surfing for ANY of your personal or household needs
Along with the strategy to challenge the NFL for a piece of their market, the USFL also filed a $1.7 billion antitrust lawsuit against their league rivals, charging them with monopolizing television broadcasting rights and in some cases, denying access to stadium venues.
Pete Rozelle, Commissioner of the NFL, was named as one of the defendants along with all the NFL teams except for the Los Angeles Raiders whose owner, Al Davis, agreed to testify on behalf of the USFL. Trump himself testified along with a litany of television executives, in addition to prominent sports TV personality, Howard Cosell.
The highly publicized case went to trial in the Spring of 1986 and in July the jury emerged with a verdict against the NF, but awarded the USFL damages of only $3.00. Effectively, the NFL was found guilty of controlling professional football, but not the television market.
The USFL was banking on claims against TV revenues, but they ended up walking away with no monetary compensation.
BUY- 1985 USFL Generals Doug Flutie Topps trading card
Three seasons and nearly $200 million after it was founded, the USFL folded and never played another game. The ailing league was hanging on threads for most of its existence, but Trump's aggressive gamble of taking on the NFL helped seal its fate.
For the deal master, the USFL was just another transaction in a long career of business ventures. In 2014, Trump made a $1.0 billion offer to buy the Buffalo Bills but lost out to Terry Pegula's winning cash bid of $1.4 billion.
Had he succeeded in nabbing the Bills, Donald Trump might not have campaigned to become President Trump.


text:
Q: Tracking custom tfs build activity in workflow application I'm developing a rather extensive library of custom build activities and created a workflow console application to speed up testing changes on that library. Now to further enhance the development process I would like to output the build workflow tracking messages to my console. The messages are generated in my custom activites like so:
context.TrackBuildMessage("Activity started.", BuildMessageImportance.High);

My first guess was creating a BuildTrackingParticipant and add it as extension to the invoker but I don't know how to initialize a BuildTrackingParticipant so it outputs its messages to the app console.
WorkflowInvoker invoker = new WorkflowInvoker(myWorkflow);
invoker.Extensions.Add(BuildTrackingParticipant);
invoker.Invoke();

Is there a way to make this possible?

redpajama_set_name: RedPajamaStackExchange


text:
Wendi McLendon-Covey, Damon Wayans Jr. Join 'Barb And Star Go To Vista Del Mar'
Katherine Langford To Appear In Next 'Avengers' Movie
By Amanda N'Duka
Amanda N'Duka
pmc-editorial-manager
More Stories By Amanda
Greta Gerwig, Noah Baumbach To Script Warner Bros' Live-Action 'Barbie' Film
Streamline Global Nabs Rights To 'Crescendo' Novel
'Greenland': STX Gerard Butler-Led Thriller Adds Andrew Bachelor & Scott Glenn
Katherine Langford, best known for her breakout role in Netflix's YA series, 13 Reasons Why, will appear in Marvel/Disney's yet-to-be-titled fourth Avengers movie, which recently wrapped principal photography. In true Marvel fashion, details on Langford's role are being held tight.
Langford has recently moved on from 13 Reasons, after starring as Hannah Baker for two seasons, and landed another lead role in the upcoming Netflix series Cursed from famed comic book writer/artist Frank Miller and writer/producer Tom Wheeler.
The next Avenger installment from the Russo Brothers is set to hit theaters May 3, 2019. Infinity War left fans in a tiff over the disappearance of some the biggest names in the franchise. Since hitting theaters in April, the pic currently the highest grossing film of 2018 with a worldwide box office tally of over $2 billion.
The Wrap was the first to report Langford's casting.


Publication is a critical part of the academic research life cycle. A typical research paper has a section for materials and methods. However, considering the word and style limits imposed by journals, it is highly unlikely that a researcher will be able to include all the details that they used when conducting their experiments. This is, of course, problematic for those who wish to use these methods in future work. This lack of the complete methodological details is also a challenge for those trying to conduct replication studies. Building on their open data policy, PLOS journals have partnered with Protocols.io to address this issue by encouraging their authors to submit their complete methodology to protocols.io. The CEO of Protocols.io, Lenny Teytelman has expressed delight at the new collaboration with PLOS journals, stating that both entities have a similar open access thrust.
The difference between methods in a typical paper and methods on protocols.io is vast. The website allows contributors to include step by step notes on how to conduct the method in question. This means that hosting methods on protocols.io will allow researchers to describe in excruciating details exactly how they conducted their work. There are also both Apple and Android mobile apps for protocols.io that allow researchers to get instructions for any experiment they found on the site, or any private protocol they have created. The app helps scientists keep a track of where they are in the protocol, helps them see what is next and alerts them when it is time to move to the next step. The site also allows for comments and suggestions to be left on each method so that protocols can continually be improved for the benefit of the entire community. Methods on protocols.io also have persistent citable identifiers which allow credit to be given to those who crafted each method.
Once authors deposit their detailed methods on protocols.io, they can then use the unique DOI for their method to allow readers, editors, and reviewers to link directly from the PLOS papers to the protocol in question. As soon as the article is published in a PLOS journal there will be a link between the paper and the protocol which will be available under a Creative Commons license. While the community can modify and improve the methodology, the version associated with the published article will always remain accessible. The partnership between PLOS and Protocols.io, therefore, represents a major step towards ensuring the reproducibility of published research. This aligns well with Lenny Teytelman's objective to have research be effectively communicated as well as remain accessible and reusable.


text:
Jones Act
Longshore And Harbor Workers' Compensation Act
Passenger And Recreational Boat Accidents
Experience You Can
Depend On
Long Island municipality faces another lawsuit after boat crash
On behalf of Tabak Mellusi & Shisha LLP | Mar 27, 2020 | Boating Accidents
Although no one expects a car accident, most drivers know how to handle one. They may take photographs of the scene for insurance purposes or call the police to report a serious incident. But the process can be unclear in the case of a boating accident, when effects...
First lawsuits against cruise ships for viral outbreak emerge
Cruise ships have a certain reputation for being less-than hygenic at the best of times. Some people have even referred to them as "floating Petri dishes" because they essentially put a lot of people together into small spaces and keep them there for a few weeks. That...
Below Deck shows that deckhand work can be quite dangerous
On behalf of Tabak Mellusi & Shisha LLP | Mar 13, 2020 | Jones Act
One ever-popular show on television (TV) is Bravo's Below Deck. In case you haven't watched the program before, it gives you a behind-the-scenes look at what it's like to work as a deckhand on a superyacht for the rich and famous. The work that these individuals...
Maintenance and cure should only be ended by a doctor
On behalf of Tabak Mellusi & Shisha LLP | Mar 6, 2020 | Maintenance & Cure
Maintenance and cure, like so many terms from the long history of seamanship, is exactly what it sounds like. Maintenance is the cost of living while on a ship or in recovery due to injuries suffered on a ship. Cure is the expense of medical treatment and other...
Cruise Ship Injuries (7)
Fishing Boat Accidents (10)
Jones Act (50)
Longshore Act (36)
Maintenance & Cure (42)
Maritime Accidents (75)
Seaman Status (7)
Mental health a major concern among cruise ship employees
Seamen stranded onboard during pandemic
Seamen injuries caused by various maritime accidents
Seamen injured on unseaworthy vessel can recover damages
When can Jones Act protections come into play?
Firm Contact Information
29 Broadway, Suite 2400
© 2021 Tabak Mellusi & Shisha LLP. All Rights Reserved.


text:
ALL DEPARTMENTS AT THE ANCRAM TOWN HALL ARE OPEN BY APPOINTMENT ONLY - CALL 518-329-6512
Historic Farming Community Moving Forward
Ancram, New York
Assessment Roll / Taxes
Ancramemail
Kid's Camp & Town Pool
Historic Vestibule
Historic District Information
Policies / Manuals
Schools, Churches & Organizations etc.
Camp / Swimming Pool Board
Climate Smart Community Task Force
Zoning Revisions Committee (ZRC)
Subdivision Regulations Revisions Committee (SRRC)
Agricultural Advisory Council
Conservation Advisory Council
Agriculture & Farmland Protection Plan
Community Development Strategic Plan
Natural Resources Conservation Plan
Public Hearing on Local Law No. 3 of 2017
April 22, 2017 By Laurie
Town of Ancram Public Hearing: The Ancram Town Board will hold a public hearing on Local Law No. 3 of 2017 – The Town of Ancram Highway Land Subdivision Regulations – at 6:45 pm on Thursday May, 18, 2017 at the Ancram Town Hall, 1416 County Route 7, Ancram NY 12502 to solicit public comments on the proposed local law. A copy of the proposed local law is available from the Ancram Town Clerk and is posted on the Town of Ancram website at www.townofancram.org.
Filed Under: Public Notices
PublicHearing on Local Law No. 2 of 2017
The Ancram Town Board will hold a public hearing on Local Law No. 2 of 2017 – The Town of Ancram Highway Constructions Standards Act – at 6:30 pm on Thursday, May 18, 2017 at the Ancram Town Hall, 1416 County Route 7, Ancram NY 12502 to solicit public comments on the proposed local law. A copy of the proposed local law is available from the Ancram Town Clerk and is posted on the Town of Ancram website at www.townofancram.org.
Planning Board – 05-04-17 (Parcel ID# 196-1-9)
Please take notice that the Town of Ancram Planning Board will hold a public hearing on Thursday, May 4th, 2017 at 7:00 p.m. at the Ancram Town Hall, 1416 County Route 7. Under consideration is the application for a lot line adjustment between parcel ID# 196-1-9 owned by Jennifer Berne and parcel ID# 196.-1-11.111 owned by Eric Benn located on Westfall Road, Ancram, NY 12502. All persons wishing to comment on the application will have an opportunity to do so.
ZBA – Public Hearing (159 Empire Road)
April 4, 2017 By Laurie
Please take notice that the Town of Ancram Zoning Board of Appeals will hold a Public Hearing on Tuesday April 17th, 2016, at 7:00 p.m. at the Town Hall, 1416 County Route 7. Under consideration is an area variance to build an accessory structure (treehouse) within the 100 ft of a DEC Regulated Wetland, located at 159 Empire Road in the Town of Ancram. All those who wish to comment are welcome to do so.
Town Board – Public Hearing on Local Law No. 1 of 2017
March 5, 2017 By Laurie
The Ancram Town Board will hold a public hearing on Local Law No. 1 of 2017 – The Town of Ancram Planning Board and Zoning Board of Appeals Alternate Members Act – at 6:45 pm on Thursday March 16, 2017 at the Ancram Town Hall, 1416 County Route 7, Ancram NY 12502 to solicit public comments on the proposed local law. A copy of the proposed local law is available from the Ancram Town Clerk, is posted on the Town of Ancram website at www.townofancram.org. Click here for a copy of this proposed local law.
Planning Board – 03-02-17 (Parcel ID# 214.-1-30)
February 20, 2017 By Laurie
Please take notice that the Town of Ancram Planning Board will hold a public hearing on Thursday, March 2nd, 2017 at 7:00 p.m. at the Ancram Town Hall, 1416 County Route 7. Under consideration is the application for a special use permit to install an outdoor wood furnace on parcel ID# 214.-1-30 at 31 Skyline Road in Ancramdale, NY 12503. All persons wishing to comment on the application will have an opportunity to do so.
Recent Public Notice
Ancram Highway Department Seeking Drivers
Date of Public Notice Event: December 22, 2020
The Ancram Highway Department is looking for applicants with a CDL and experience driving 10 wheel plow trucks for occasional part time employment. If interested, or if y9u would like more information, please contact Ancram Highway Superintendent Jim Miller at 518-329-6190.
Public Notices Archive
Recent General News
Town of Ancram Accepting Bids
Notice Please be advised that the Town of Ancram will be accepting bids on the following … [Read More...] about Town of Ancram Accepting Bids
General News Archive
Ancram Town Hall
1416 County Route 7
Ancram, NY 12502
Search Pages & Posts
Ancram Weather
Weather forecast Ancram, New York ▸
The Town of Ancram has made every effort to ensure that information posted to this website is correct at the time of posting. However, meeting dates, times and places are always subject to change; it is recommended that you contact a local official or the representative of an event posted, for confirmation before attending. Content of this website, although checked for accuracy, is not warranted to be error-free. The Town of Ancram provides links to web sites as a convenience to users and makes no representation concerning these web sites and does not assume any responsibility for their content.
Copyright © 2021 Town of Ancram, New York | Website by ZEN POINT MEDIA | Log in


text:
Chattanooga Mocs (0-0)
FCS players impress at Shrine, NFLPA bowls
(Stats Perform) - Former Illinois State running back James Robinson said he loves the doubters.
Robinson, teammate Luther Kirk and more than two dozen players from the FCS level helped make believers with impressive performances at the two college football all-star games Saturday.
Kirk and Robinson were standouts for the West in its 31-27 loss to the East at the 95th East-West Shrine Bowl in St. Petersburg, Florida. Chattanooga quarterback Nick Tiano won MVP honors following the National team's 30-20 victory over the American squad at the 9th NFLPA Collegiate Bowl in Pasadena, California.
Mocs Headlines
NDSU, JMU players move on to all-star bowls
Kupp headlines STATS FCS All-Decade Team
Passing Yards: N. Tiano 2242
Passing TDs: N. Tiano 14
Rushing Yards: A. Ford 1081
Rushing TDs: A. Ford 9
Receiving Yards: B. Nunnelly 794
Receiving TDs: C. James 7
8/29 vs. Eastern Illinois W 24 - 10
9/7 at Jacksonville State L 20 - 41
9/14 at Tennessee L 0 - 45
9/21 vs. James Madison L 14 - 37
9/28 vs. Western Carolina W 60 - 36
10/5 at Mercer W 34 - 17
10/17 vs. ETSU W 16 - 13
10/26 at Wofford L 34 - 35
11/2 vs. Furman L 20 - 35
11/9 at Samford W 35 - 27
11/16 vs. Citadel W 34 - 33
11/23 at VMI L 24 - 31


And you can see my recommended pressure washer nozzles: Smartpainters pack of 5 pressure washer nozzles on Amazon.
The white nozzle produces a 40 degree spray fan. This is the widest spray pattern of all the color coded nozzles – so it produces the least amount of pressure. You'll want to use the white nozzle when you're cleaning sensitive surfaces like decks, window washing, washing your car, etc. And a lot of us like the wide spray of the white nozzle, because it works really fast & gentle cleaning of large areas like driveways, pools, etc.
My recommendation: Smartpainter pressure washer replacement nozzles on Amazon.
I really like and recommend the Smartpainter pressure washer replacement tips that are available on Amazon.
Your green nozzle will give you a 25 degree spray fan, which is small than the white nozzle, but it's also more powerful. You can use the green color coded nozzle for cleaning your patio, vinyl siding or for getting really stuck-on leaves, mud or grass clipping off your walkways or driveways. When you're starting with a green nozzle, stand farther away from the surface you're cleaning. And only move closer, slowly, if you need more pressure to clean. Go slowly.
The yellow nozzle color code means it will produce a 15 degree fan pattern – with a lot of pressure! This is a powerful nozzle and it's also called a chiseling tip. I only recommend using this for really tough stains, on durable surfaces, like peeling paint or getting rid of tough mildew. Just like using the green nozzle, start by standing far away from the dirty surface, and only move closer if you absolutely need to.
The red pressure washer nozzle is the most powerful nozzle that produces a 0 degree spray. I want to tell you: you have to be very careful if you use this nozzle. It produces a concentrated pressure spray that will gouge or destroy soft or delicate surfaces. Don't even think about using it on painted surfaces, wood, etc. Personally, I rarely use it. But, some folks like to use it to remove set-in, stubborn stains and removing grass from between cracks in a driveway or walkway. Only use with extreme caution.
You'll want to read about my top gas pressure washer recommendation: the Generac 6596 on Amazon. It has power, quality, speed & a competitive price. With it's 196cc Generac gas engine, whopping 2,800 PSI, 2.5 GPM and strong axial cam pump, it's my best gas pressure washer pick. Your can read more reviews & check Amazon's price on the Generac 6596.
And then there's the black color pressure washer nozzle. It's also called a soaper nozzle. You'll only use this nozzle when you want to apply detergents or pre-cleaners. It provides a lower pressure spray so you can properly apply your soap. Then you'll switch to a white, green, yellow or red nozzle to start cleaning.
Just like any working part, a pressure washer nozzle can wear out, after a lot of use. (And if you're like me, you might occasionally lose one.) If you use your washer often, I recommend replacing your pressure washer nozzles each spring. And, of course, if you lose one, it's easy to replace it.
Now you can match up your cleaning jobs to the right pressure washer color codes!


text:
Join NYSOMS
WCB IME Application
NYSOMS Newsletters
NYSOMS News
DO Day in Albany
ROC-NY 2020
NYSOMS 2020 Poster Competition
Other CME
Students'/Residents' Center
Find a DO
What is a DO?
OMT: Hands-On Care
Osteopathic Education
History of National Doctors' Day
National Doctors' Day is held every year on March 30th in the United States. It is a day to celebrate the contribution of physicians who serve our country by caring for its citizens. The first Doctor's Day observance was March 30, 1933 in Winder, Georgia. Eudora Brown Almond, wife of Dr. Charles B. Almond, decided to set aside a day to honor physicians. This first observance included the mailing greeting cards and placing flowers on graves of deceased doctors.
On March 30, 1958, a Resolution Commemorating Doctors' Day was adopted by the United States House of Representatives. In 1990, legislation was introduced in the House and Senate to establish a national Doctor's Day. Following overwhelming approval by the United States Senate and the House of Representatives, on October 30, 1990, President George Bush signed S.J. RES. #366 (which became Public Law 101-473) designating March 30th as "National Doctor's Day."
The red carnation has become a symbol of this remembrance.
© Copyright 2019 New York State Osteopathic Medical Society . All rights reserved.


Have a couple "clan" members already from the area we played all of the halos from Halo ce, Halo 2, Halo 3, Halo ODST, Halo Reach, and Halo 5 currently (still play Halo 5). My name is Coty (Co-tee or Cody is fine) Gt: SG FeLLoN or xFeLLoN I'm usually always on my SG account also have a club in Xbox with about 50+ members all from New Mexico if you want to join the club name is "505 Squad" feel free to join. P.s if you add me send a message saying your from NM plz.