text:
package org.apache.hadoop.yarn.server.resourcemanager.scheduler;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.yarn.api.records.Priority;
import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.api.records.ResourceRequest;
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState;
import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer;
import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerState;
import org.apache.hadoop.yarn.util.resource.Resources;

/**
 * This class keeps track of all the consumption of an application. This also
 * keeps track of current running/completed containers for the application.
 */
@Private
@Unstable
public class AppSchedulingInfo {

  private static final Log LOG = LogFactory.getLog(AppSchedulingInfo.class);
  private final ApplicationAttemptId applicationAttemptId;
  final ApplicationId applicationId;
  private String queueName;
  Queue queue;
  final String user;
  // TODO making containerIdCounter long
  private final AtomicLong containerIdCounter;
  private final int EPOCH_BIT_SHIFT = 40;

  final Set<Priority> priorities = new TreeSet<Priority>(
      new org.apache.hadoop.yarn.server.resourcemanager.resource.Priority.Comparator());
  final Map<Priority, Map<String, ResourceRequest>> resourceRequestMap =
      new ConcurrentHashMap<Priority, Map<String, ResourceRequest>>();
  final Map<NodeId, Map<Priority, Map<ContainerId,
      SchedContainerChangeRequest>>> increaseRequestMap =
      new ConcurrentHashMap<>();
  private Set<String> userBlacklist = new HashSet<>();
  private Set<String> amBlacklist = new HashSet<>();

  //private final ApplicationStore store;
  private ActiveUsersManager activeUsersManager;

  /* Allocated by scheduler */
  boolean pending = true; // for app metrics

  private ResourceUsage appResourceUsage;

  public AppSchedulingInfo(ApplicationAttemptId appAttemptId,
      String user, Queue queue, ActiveUsersManager activeUsersManager,
      long epoch, ResourceUsage appResourceUsage) {
    this.applicationAttemptId = appAttemptId;
    this.applicationId = appAttemptId.getApplicationId();
    this.queue = queue;
    this.queueName = queue.getQueueName();
    this.user = user;
    this.activeUsersManager = activeUsersManager;
    this.containerIdCounter = new AtomicLong(epoch << EPOCH_BIT_SHIFT);
    this.appResourceUsage = appResourceUsage;
  }

  public ApplicationId getApplicationId() {
    return applicationId;
  }

  public ApplicationAttemptId getApplicationAttemptId() {
    return applicationAttemptId;
  }

  public String getQueueName() {
    return queueName;
  }

  public String getUser() {
    return user;
  }

  public synchronized boolean isPending() {
    return pending;
  }

  /**
   * Clear any pending requests from this application.
   */
  private synchronized void clearRequests() {
    priorities.clear();
    resourceRequestMap.clear();
    LOG.info("Application " + applicationId + " requests cleared");
  }

  public long getNewContainerId() {
    return this.containerIdCounter.incrementAndGet();
  }

  public boolean hasIncreaseRequest(NodeId nodeId) {
    Map<Priority, Map<ContainerId, SchedContainerChangeRequest>> requestsOnNode =
        increaseRequestMap.get(nodeId);
    if (null == requestsOnNode) {
      return false;
    }
    return requestsOnNode.size() > 0;
  }

  public Map<ContainerId, SchedContainerChangeRequest>
      getIncreaseRequests(NodeId nodeId, Priority priority) {
    Map<Priority, Map<ContainerId, SchedContainerChangeRequest>> requestsOnNode =
        increaseRequestMap.get(nodeId);
    if (null == requestsOnNode) {
      return null;
    }

    return requestsOnNode.get(priority);
  }

  public synchronized boolean updateIncreaseRequests(
      List<SchedContainerChangeRequest> increaseRequests) {
    boolean resourceUpdated = false;

    for (SchedContainerChangeRequest r : increaseRequests) {
      NodeId nodeId = r.getRMContainer().getAllocatedNode();

      Map<Priority, Map<ContainerId, SchedContainerChangeRequest>> requestsOnNode =
          increaseRequestMap.get(nodeId);
      if (null == requestsOnNode) {
        requestsOnNode = new TreeMap<>();
        increaseRequestMap.put(nodeId, requestsOnNode);
      }

      SchedContainerChangeRequest prevChangeRequest =
          getIncreaseRequest(nodeId, r.getPriority(), r.getContainerId());
      if (null != prevChangeRequest) {
        if (Resources.equals(prevChangeRequest.getTargetCapacity(),
            r.getTargetCapacity())) {
          // New target capacity is as same as what we have, just ignore the new
          // one
          continue;
        }

        // remove the old one
        removeIncreaseRequest(nodeId, prevChangeRequest.getPriority(),
            prevChangeRequest.getContainerId());
      }

      if (Resources.equals(r.getTargetCapacity(), r.getRMContainer().getAllocatedResource())) {
        if (LOG.isDebugEnabled()) {
          LOG.debug("Trying to increase/decrease container, "
              + "target capacity = previous capacity = " + prevChangeRequest
              + " for container=" + r.getContainerId()
              + ". Will ignore this increase request");
        }
        continue;
      }

      // add the new one
      resourceUpdated = true;
      insertIncreaseRequest(r);
    }
    return resourceUpdated;
  }

  // insert increase request and add missing hierarchy if missing
  private void insertIncreaseRequest(SchedContainerChangeRequest request) {
    NodeId nodeId = request.getNodeId();
    Priority priority = request.getPriority();
    ContainerId containerId = request.getContainerId();

    Map<Priority, Map<ContainerId, SchedContainerChangeRequest>> requestsOnNode =
        increaseRequestMap.get(nodeId);
    if (null == requestsOnNode) {
      requestsOnNode =
          new HashMap<Priority, Map<ContainerId, SchedContainerChangeRequest>>();
      increaseRequestMap.put(nodeId, requestsOnNode);
    }

    Map<ContainerId, SchedContainerChangeRequest> requestsOnNodeWithPriority =
        requestsOnNode.get(priority);
    if (null == requestsOnNodeWithPriority) {
      requestsOnNodeWithPriority =
          new TreeMap<ContainerId, SchedContainerChangeRequest>();
      requestsOnNode.put(priority, requestsOnNodeWithPriority);
    }

    requestsOnNodeWithPriority.put(containerId, request);

    // update resources
    String partition = request.getRMContainer().getNodeLabelExpression();
    Resource delta = request.getDeltaCapacity();
    appResourceUsage.incPending(partition, delta);
    queue.incPendingResource(partition, delta);

    if (LOG.isDebugEnabled()) {
      LOG.debug("Added increase request:" + request.getContainerId()
          + " delta=" + request.getDeltaCapacity());
    }

    // update priorities
    priorities.add(priority);
  }

  public synchronized boolean removeIncreaseRequest(NodeId nodeId, Priority priority,
      ContainerId containerId) {
    Map<Priority, Map<ContainerId, SchedContainerChangeRequest>> requestsOnNode =
        increaseRequestMap.get(nodeId);
    if (null == requestsOnNode) {
      return false;
    }

    Map<ContainerId, SchedContainerChangeRequest> requestsOnNodeWithPriority =
        requestsOnNode.get(priority);
    if (null == requestsOnNodeWithPriority) {
      return false;
    }

    SchedContainerChangeRequest request =
        requestsOnNodeWithPriority.remove(containerId);

    // remove hierarchies if it becomes empty
    if (requestsOnNodeWithPriority.isEmpty()) {
      requestsOnNode.remove(priority);
    }
    if (requestsOnNode.isEmpty()) {
      increaseRequestMap.remove(nodeId);
    }

    if (request == null) {
      return false;
    }

    // update queue's pending resource if request exists
    String partition = request.getRMContainer().getNodeLabelExpression();
    Resource delta = request.getDeltaCapacity();
    appResourceUsage.decPending(partition, delta);
    queue.decPendingResource(partition, delta);

    if (LOG.isDebugEnabled()) {
      LOG.debug("remove increase request:" + request);
    }

    return true;
  }

  public SchedContainerChangeRequest getIncreaseRequest(NodeId nodeId,
      Priority priority, ContainerId containerId) {
    Map<Priority, Map<ContainerId, SchedContainerChangeRequest>> requestsOnNode =
        increaseRequestMap.get(nodeId);
    if (null == requestsOnNode) {
      return null;
    }

    Map<ContainerId, SchedContainerChangeRequest> requestsOnNodeWithPriority =
        requestsOnNode.get(priority);
    if (null == requestsOnNodeWithPriority) {
      return null;
    }

    return requestsOnNodeWithPriority.get(containerId);
  }

  /**
   * The ApplicationMaster is updating resource requirements for the
   * application, by asking for more resources and releasing resources acquired
   * by the application.
   *
   * @param requests resources to be acquired
   * @param recoverPreemptedRequest recover Resource Request on preemption
   * @return true if any resource was updated, false else
   */
  synchronized public boolean updateResourceRequests(
      List<ResourceRequest> requests, boolean recoverPreemptedRequest) {
    QueueMetrics metrics = queue.getMetrics();

    boolean anyResourcesUpdated = false;

    // Update resource requests
    for (ResourceRequest request : requests) {
      Priority priority = request.getPriority();
      String resourceName = request.getResourceName();
      boolean updatePendingResources = false;
      ResourceRequest lastRequest = null;

      if (resourceName.equals(ResourceRequest.ANY)) {
        if (LOG.isDebugEnabled()) {
          LOG.debug("update:" + " application=" + applicationId + " request="
              + request);
        }
        updatePendingResources = true;
        anyResourcesUpdated = true;

        // Premature optimization?
        // Assumes that we won't see more than one priority request updated
        // in one call, reasonable assumption... however, it's totally safe
        // to activate same application more than once.
        // Thus we don't need another loop ala the one in decrementOutstanding()
        // which is needed during deactivate.
        if (request.getNumContainers() > 0) {
          activeUsersManager.activateApplication(user, applicationId);
        }
        ResourceRequest previousAnyRequest =
            getResourceRequest(priority, resourceName);

        // When there is change in ANY request label expression, we should
        // update label for all resource requests already added of same
        // priority as ANY resource request.
        if ((null == previousAnyRequest)
            || isRequestLabelChanged(previousAnyRequest, request)) {
          Map<String, ResourceRequest> resourceRequest =
              getResourceRequests(priority);
          if (resourceRequest != null) {
            for (ResourceRequest r : resourceRequest.values()) {
              if (!r.getResourceName().equals(ResourceRequest.ANY)) {
                r.setNodeLabelExpression(request.getNodeLabelExpression());
              }
            }
          }
        }
      } else {
        ResourceRequest anyRequest =
            getResourceRequest(priority, ResourceRequest.ANY);
        if (anyRequest != null) {
          request.setNodeLabelExpression(anyRequest.getNodeLabelExpression());
        }
      }

      Map<String, ResourceRequest> asks = this.resourceRequestMap.get(priority);

      if (asks == null) {
        asks = new ConcurrentHashMap<String, ResourceRequest>();
        this.resourceRequestMap.put(priority, asks);
        this.priorities.add(priority);
      }
      lastRequest = asks.get(resourceName);

      if (recoverPreemptedRequest && lastRequest != null) {
        // Increment the number of containers to 1, as it is recovering a
        // single container.
        request.setNumContainers(lastRequest.getNumContainers() + 1);
      }

      asks.put(resourceName, request);
      if (updatePendingResources) {

        // Similarly, deactivate application?
        if (request.getNumContainers() <= 0) {
          LOG.info("checking for deactivate of application :"
              + this.applicationId);
          checkForDeactivation();
        }

        int lastRequestContainers = lastRequest != null ? lastRequest
            .getNumContainers() : 0;
        Resource lastRequestCapability = lastRequest != null ? lastRequest
            .getCapability() : Resources.none();
        metrics.incrPendingResources(user, request.getNumContainers(),
            request.getCapability());
        metrics.decrPendingResources(user, lastRequestContainers,
            lastRequestCapability);

        // update queue:
        Resource increasedResource =
            Resources.multiply(request.getCapability(),
                request.getNumContainers());
        queue.incPendingResource(request.getNodeLabelExpression(),
            increasedResource);
        appResourceUsage.incPending(request.getNodeLabelExpression(),
            increasedResource);
        if (lastRequest != null) {
          Resource decreasedResource =
              Resources.multiply(lastRequestCapability, lastRequestContainers);
          queue.decPendingResource(lastRequest.getNodeLabelExpression(),
              decreasedResource);
          appResourceUsage.decPending(lastRequest.getNodeLabelExpression(),
              decreasedResource);
        }
      }
    }
    return anyResourcesUpdated;
  }

  private boolean isRequestLabelChanged(ResourceRequest requestOne,
      ResourceRequest requestTwo) {
    String requestOneLabelExp = requestOne.getNodeLabelExpression();
    String requestTwoLabelExp = requestTwo.getNodeLabelExpression();
    // First request label expression can be null and second request
    // is not null then we have to consider it as changed.
    if ((null == requestOneLabelExp) && (null != requestTwoLabelExp)) {
      return true;
    }
    // If the label is not matching between both request when
    // requestOneLabelExp is not null.
    return ((null != requestOneLabelExp) && !(requestOneLabelExp
        .equals(requestTwoLabelExp)));
  }

  /**
   * The ApplicationMaster is updating the userBlacklist used for containers
   * other than AMs.
   *
   * @param blacklistAdditions resources to be added to the userBlacklist
   * @param blacklistRemovals resources to be removed from the userBlacklist
   */
   public void updateBlacklist(
      List<String> blacklistAdditions, List<String> blacklistRemovals) {
     updateUserOrAMBlacklist(userBlacklist, blacklistAdditions,
         blacklistRemovals);
  }

  /**
   * RM is updating blacklist for AM containers.
   * @param blacklistAdditions resources to be added to the amBlacklist
   * @param blacklistRemovals resources to be added to the amBlacklist
   */
  public void updateAMBlacklist(
      List<String> blacklistAdditions, List<String> blacklistRemovals) {
    updateUserOrAMBlacklist(amBlacklist, blacklistAdditions,
        blacklistRemovals);
  }

  void updateUserOrAMBlacklist(Set<String> blacklist,
      List<String> blacklistAdditions, List<String> blacklistRemovals) {
    synchronized (blacklist) {
      if (blacklistAdditions != null) {
        blacklist.addAll(blacklistAdditions);
      }

      if (blacklistRemovals != null) {
        blacklist.removeAll(blacklistRemovals);
      }
    }
  }

  synchronized public Collection<Priority> getPriorities() {
    return priorities;
  }

  synchronized public Map<String, ResourceRequest> getResourceRequests(
      Priority priority) {
    return resourceRequestMap.get(priority);
  }

  public List<ResourceRequest> getAllResourceRequests() {
    List<ResourceRequest> ret = new ArrayList<ResourceRequest>();
    for (Map<String, ResourceRequest> r : resourceRequestMap.values()) {
      ret.addAll(r.values());
    }
    return ret;
  }

  synchronized public ResourceRequest getResourceRequest(Priority priority,
      String resourceName) {
    Map<String, ResourceRequest> nodeRequests = resourceRequestMap.get(priority);
    return (nodeRequests == null) ? null : nodeRequests.get(resourceName);
  }

  public synchronized Resource getResource(Priority priority) {
    ResourceRequest request = getResourceRequest(priority, ResourceRequest.ANY);
    return (request == null) ? null : request.getCapability();
  }

  /**
   * Returns if the node is either blacklisted by the user or the system
   * @param resourceName the resourcename
   * @param useAMBlacklist true if it should check amBlacklist
   * @return true if its blacklisted
   */
  public boolean isBlacklisted(String resourceName,
      boolean useAMBlacklist) {
    if (useAMBlacklist){
      synchronized (amBlacklist) {
        return amBlacklist.contains(resourceName);
      }
    } else {
      synchronized (userBlacklist) {
        return userBlacklist.contains(resourceName);
      }
    }
  }

  public synchronized void increaseContainer(
      SchedContainerChangeRequest increaseRequest) {
    NodeId nodeId = increaseRequest.getNodeId();
    Priority priority = increaseRequest.getPriority();
    ContainerId containerId = increaseRequest.getContainerId();

    if (LOG.isDebugEnabled()) {
      LOG.debug("allocated increase request : applicationId=" + applicationId
          + " container=" + containerId + " host="
          + increaseRequest.getNodeId() + " user=" + user + " resource="
          + increaseRequest.getDeltaCapacity());
    }

    // Set queue metrics
    queue.getMetrics().allocateResources(user, 0,
        increaseRequest.getDeltaCapacity(), true);

    // remove the increase request from pending increase request map
    removeIncreaseRequest(nodeId, priority, containerId);

    // update usage
    appResourceUsage.incUsed(increaseRequest.getNodePartition(),
        increaseRequest.getDeltaCapacity());
  }

  public synchronized void decreaseContainer(
      SchedContainerChangeRequest decreaseRequest) {
    // Delta is negative when it's a decrease request
    Resource absDelta = Resources.negate(decreaseRequest.getDeltaCapacity());

    if (LOG.isDebugEnabled()) {
      LOG.debug("Decrease container : applicationId=" + applicationId
          + " container=" + decreaseRequest.getContainerId() + " host="
          + decreaseRequest.getNodeId() + " user=" + user + " resource="
          + absDelta);
    }

    // Set queue metrics
    queue.getMetrics().releaseResources(user, 0, absDelta);

    // update usage
    appResourceUsage.decUsed(decreaseRequest.getNodePartition(), absDelta);
  }

  /**
   * Resources have been allocated to this application by the resource
   * scheduler. Track them.
   *
   * @param type
   *          the type of the node
   * @param node
   *          the nodeinfo of the node
   * @param priority
   *          the priority of the request.
   * @param request
   *          the request
   * @param container
   *          the containers allocated.
   */
  synchronized public List<ResourceRequest> allocate(NodeType type,
      SchedulerNode node, Priority priority, ResourceRequest request,
      Container container) {
    List<ResourceRequest> resourceRequests = new ArrayList<ResourceRequest>();
    if (type == NodeType.NODE_LOCAL) {
      allocateNodeLocal(node, priority, request, container, resourceRequests);
    } else if (type == NodeType.RACK_LOCAL) {
      allocateRackLocal(node, priority, request, container, resourceRequests);
    } else {
      allocateOffSwitch(node, priority, request, container, resourceRequests);
    }
    QueueMetrics metrics = queue.getMetrics();
    if (pending) {
      // once an allocation is done we assume the application is
      // running from scheduler's POV.
      pending = false;
      metrics.runAppAttempt(applicationId, user);
    }

    if (LOG.isDebugEnabled()) {
      LOG.debug("allocate: applicationId=" + applicationId
          + " container=" + container.getId()
          + " host=" + container.getNodeId().toString()
          + " user=" + user
          + " resource=" + request.getCapability()
          + " type=" + type);
    }
    metrics.allocateResources(user, 1, request.getCapability(), true);
    metrics.incrNodeTypeAggregations(user, type);
    return resourceRequests;
  }

  /**
   * The {@link ResourceScheduler} is allocating data-local resources to the
   * application.
   *
   * @param allocatedContainers
   *          resources allocated to the application
   */
  synchronized private void allocateNodeLocal(SchedulerNode node,
      Priority priority, ResourceRequest nodeLocalRequest, Container container,
      List<ResourceRequest> resourceRequests) {
    // Update future requirements
    decResourceRequest(node.getNodeName(), priority, nodeLocalRequest);

    ResourceRequest rackLocalRequest = resourceRequestMap.get(priority).get(
        node.getRackName());
    decResourceRequest(node.getRackName(), priority, rackLocalRequest);

    ResourceRequest offRackRequest = resourceRequestMap.get(priority).get(
        ResourceRequest.ANY);
    decrementOutstanding(offRackRequest);

    // Update cloned NodeLocal, RackLocal and OffRack requests for recovery
    resourceRequests.add(cloneResourceRequest(nodeLocalRequest));
    resourceRequests.add(cloneResourceRequest(rackLocalRequest));
    resourceRequests.add(cloneResourceRequest(offRackRequest));
  }

  private void decResourceRequest(String resourceName, Priority priority,
      ResourceRequest request) {
    request.setNumContainers(request.getNumContainers() - 1);
    if (request.getNumContainers() == 0) {
      resourceRequestMap.get(priority).remove(resourceName);
    }
  }

  /**
   * The {@link ResourceScheduler} is allocating data-local resources to the
   * application.
   *
   * @param allocatedContainers
   *          resources allocated to the application
   */
  synchronized private void allocateRackLocal(SchedulerNode node,
      Priority priority, ResourceRequest rackLocalRequest, Container container,
      List<ResourceRequest> resourceRequests) {
    // Update future requirements
    decResourceRequest(node.getRackName(), priority, rackLocalRequest);

    ResourceRequest offRackRequest = resourceRequestMap.get(priority).get(
        ResourceRequest.ANY);
    decrementOutstanding(offRackRequest);

    // Update cloned RackLocal and OffRack requests for recovery
    resourceRequests.add(cloneResourceRequest(rackLocalRequest));
    resourceRequests.add(cloneResourceRequest(offRackRequest));
  }

  /**
   * The {@link ResourceScheduler} is allocating data-local resources to the
   * application.
   *
   * @param allocatedContainers
   *          resources allocated to the application
   */
  synchronized private void allocateOffSwitch(SchedulerNode node,
      Priority priority, ResourceRequest offSwitchRequest, Container container,
      List<ResourceRequest> resourceRequests) {
    // Update future requirements
    decrementOutstanding(offSwitchRequest);
    // Update cloned OffRack requests for recovery
    resourceRequests.add(cloneResourceRequest(offSwitchRequest));
  }

  synchronized private void decrementOutstanding(
      ResourceRequest offSwitchRequest) {
    int numOffSwitchContainers = offSwitchRequest.getNumContainers() - 1;

    // Do not remove ANY
    offSwitchRequest.setNumContainers(numOffSwitchContainers);

    // Do we have any outstanding requests?
    // If there is nothing, we need to deactivate this application
    if (numOffSwitchContainers == 0) {
      checkForDeactivation();
    }

    appResourceUsage.decPending(offSwitchRequest.getNodeLabelExpression(),
        offSwitchRequest.getCapability());
    queue.decPendingResource(offSwitchRequest.getNodeLabelExpression(),
        offSwitchRequest.getCapability());
  }

  synchronized private void checkForDeactivation() {
    boolean deactivate = true;
    for (Priority priority : getPriorities()) {
      ResourceRequest request = getResourceRequest(priority, ResourceRequest.ANY);
      if (request != null) {
        if (request.getNumContainers() > 0) {
          deactivate = false;
          break;
        }
      }
    }

    // also we need to check increase request
    if (!deactivate) {
      deactivate = increaseRequestMap.isEmpty();
    }

    if (deactivate) {
      activeUsersManager.deactivateApplication(user, applicationId);
    }
  }

  synchronized public void move(Queue newQueue) {
    QueueMetrics oldMetrics = queue.getMetrics();
    QueueMetrics newMetrics = newQueue.getMetrics();
    for (Map<String, ResourceRequest> asks : resourceRequestMap.values()) {
      ResourceRequest request = asks.get(ResourceRequest.ANY);
      if (request != null) {
        oldMetrics.decrPendingResources(user, request.getNumContainers(),
            request.getCapability());
        newMetrics.incrPendingResources(user, request.getNumContainers(),
            request.getCapability());

        Resource delta = Resources.multiply(request.getCapability(),
            request.getNumContainers());
        // Update Queue
        queue.decPendingResource(request.getNodeLabelExpression(), delta);
        newQueue.incPendingResource(request.getNodeLabelExpression(), delta);
      }
    }
    oldMetrics.moveAppFrom(this);
    newMetrics.moveAppTo(this);
    activeUsersManager.deactivateApplication(user, applicationId);
    activeUsersManager = newQueue.getActiveUsersManager();
    activeUsersManager.activateApplication(user, applicationId);
    this.queue = newQueue;
    this.queueName = newQueue.getQueueName();
  }

  synchronized public void stop(RMAppAttemptState rmAppAttemptFinalState) {
    // clear pending resources metrics for the application
    QueueMetrics metrics = queue.getMetrics();
    for (Map<String, ResourceRequest> asks : resourceRequestMap.values()) {
      ResourceRequest request = asks.get(ResourceRequest.ANY);
      if (request != null) {
        metrics.decrPendingResources(user, request.getNumContainers(),
            request.getCapability());

        // Update Queue
        queue.decPendingResource(
            request.getNodeLabelExpression(),
            Resources.multiply(request.getCapability(),
                request.getNumContainers()));
      }
    }
    metrics.finishAppAttempt(applicationId, pending, user);

    // Clear requests themselves
    clearRequests();
  }

  public synchronized void setQueue(Queue queue) {
    this.queue = queue;
  }

  public Set<String> getBlackList() {
    return this.userBlacklist;
  }

  public Set<String> getBlackListCopy() {
    synchronized (userBlacklist) {
      return new HashSet<>(this.userBlacklist);
    }
  }

  public synchronized void transferStateFromPreviousAppSchedulingInfo(
      AppSchedulingInfo appInfo) {
    //    this.priorities = appInfo.getPriorities();
    //    this.requests = appInfo.getRequests();
    // This should not require locking the userBlacklist since it will not be
    // used by this instance until after setCurrentAppAttempt.
    // Should cleanup this to avoid sharing between instances and can
    // then remove getBlacklist as well.
    this.userBlacklist = appInfo.getBlackList();
  }

  public synchronized void recoverContainer(RMContainer rmContainer) {
    QueueMetrics metrics = queue.getMetrics();
    if (pending) {
      // If there was any container to recover, the application was
      // running from scheduler's POV.
      pending = false;
      metrics.runAppAttempt(applicationId, user);
    }

    // Container is completed. Skip recovering resources.
    if (rmContainer.getState().equals(RMContainerState.COMPLETED)) {
      return;
    }

    metrics.allocateResources(user, 1, rmContainer.getAllocatedResource(),
      false);
  }

  public ResourceRequest cloneResourceRequest(ResourceRequest request) {
    ResourceRequest newRequest =
        ResourceRequest.newInstance(request.getPriority(),
            request.getResourceName(), request.getCapability(), 1,
            request.getRelaxLocality(), request.getNodeLabelExpression());
    return newRequest;
  }
}

redpajama_set_name: RedPajamaGithub


text:
3,459 is an odd composite number composed of two prime numbers multiplied together.
What does the number 3459 look like?
This visualization shows the relationship between its 2 prime factors (large circles) and 4 divisors.
3459 is an odd composite number. It is composed of two distinct prime numbers multiplied together. It has a total of four divisors.
Prime factorization of 3459:
3 × 1153
See below for interesting mathematical facts about the number 3459 from the Numbermatics database.
Names Factors Divisors Bases Roots Scales Fun
Names of 3459
Cardinal: 3459 can be written as Three thousand, four hundred fifty-nine.
Scientific notation: 3.459 × 103
Factors of 3459
Number of distinct prime factors ω(n): 2
Total number of prime factors Ω(n): 2
Sum of prime factors: 1156
Divisors of 3459
Number of divisors d(n): 4
Complete list of divisors:
1 3 1153 3459
Sum of all divisors σ(n): 4616
Sum of proper divisors (its aliquot sum) s(n): 1157
3459 is a deficient number, because the sum of its proper divisors (1157) is less than itself. Its deficiency is 2302
Bases of 3459
Binary: 1101100000112
Hexadecimal: 0xD83
Base-36: 2O3
Squares and roots of 3459
3459 squared (34592) is 11964681
3459 cubed (34593) is 41385831579
The square root of 3459 is 58.8132638101
The cube root of 3459 is 15.1234260593
Scales and comparisons
How big is 3459?
3,459 seconds is equal to 57 minutes, 39 seconds.
To count from 1 to 3,459 would take you about fifty-seven minutes.
This is a very rough estimate, based on a speaking rate of half a second every third order of magnitude. If you speak quickly, you could probably say any randomly-chosen number between one and a thousand in around half a second. Very big numbers obviously take longer to say, so we add half a second for every extra x1000. (We do not count involuntary pauses, bathroom breaks or the necessity of sleep in our calculation!)
A cube with a volume of 3459 cubic inches would be around 1.3 feet tall.
Recreational maths with 3459
3459 backwards is 9543
The number of decimal digits it has is: 4
The sum of 3459's digits is 21
HTML: To link to this page, just copy and paste the link below into your blog, web page or email.
Number 3459 - Facts about the integer
BBCODE: To link to this page in a forum post or comment box, just copy and paste the link code below:
[url=https://numbermatics.com/n/3459/]Number 3459 - Facts about the integer[/url]
MLA style:
"Number 3459 - Facts about the integer". Numbermatics.com. 2021. Web. 16 January 2021.
APA style:
Numbermatics. (2021). Number 3459 - Facts about the integer. Retrieved 16 January 2021, from https://numbermatics.com/n/3459/
Chicago style:
Numbermatics. 2021. "Number 3459 - Facts about the integer". https://numbermatics.com/n/3459/
The information we have on file for 3459 includes mathematical data and numerical statistics calculated using standard algorithms and methods. We are adding more all the time. If there are any features you would like to see, please contact us. Information provided for educational use, intellectual curiosity and fun!
Keywords: Divisors of 3459, math, Factors of 3459, curriculum, school, college, exams, university, Prime factorization of 3459, STEM, science, technology, engineering, physics, economics, calculator, three thousand, four hundred fifty-nine.
Copyright © 2011-2020 Numbermatics CID. All rights reserved. Third party materials are the property of their respective owners. By using this site you accept our privacy and cookie policy. Your feedback is welcome – contact us.
Oh no. Javascript is switched off in your browser.
Some bits of our website may not work unless you switch it on.

redpajama_set_name: RedPajamaCommonCrawl


text:
LeGreco receives Public Scholarship Award from international association
Written on November 11, 2021 .
The International Association for Research on Service-Learning and Community Engagement has recognized Dr. Marianne LeGreco with its 2021 Public Scholarship Award.
The associate professor of communications studies was honored for her work grounded in community-engaged approaches to building communication infrastructure around food.
"Her scholarship is multi modal – from TED Talks to books published with academic presses – bringing attention to issues of food insecurity and community responses to food justice," said organizers in the IARSLCE award announcement. "Her work has helped change policies at the city and county level, created food councils at the county level, and shifted the focus from individual behaviors around food practices to social determinants and barriers within our food systems."
The Public Scholarship Award is for exemplary interdisciplinary research that has a demonstrable ameliorative impact on pressing public issues with a special focus on the knowledge needs of policymakers and practitioners. The award recognizes research that generates non-traditional scholarly products, presented in a manner that is widely accessible to targeted audiences or the general public.
Nominations were reviewed by a committee of IARSLCE members and affirmed by the Board of Directors.


text:
require 'fog/core/collection'
require 'fog/storm_on_demand/models/network/balancer'

module Fog
  module Network
    class StormOnDemand
      class Balancers < Fog::Collection
        model Fog::Network::StormOnDemand::Balancer

        def all(options={})
          data = service.list_balancers(options).body['items']
          load(data)
        end

        def available(name)
          avail = service.check_balancer_available(:name => name).body
          avail['available'].to_i == 1 ? true : false
        end

        def create(options)
          balancer = service.create_balancer(options).body
          new(balancer)
        end

        def get(uniq_id)
          balancer = service.get_balancer_details(:uniq_id => uniq_id).body
          new(balancer)
        end

        def possible_nodes(options={})
          service.get_balancer_possible_nodes(options).body['items']
        end

        def strategies
          service.get_balancer_strategies.body['strategies']
        end
      end
    end
  end
end


text:
Q: How to get a website's position setup in a way that an image is centred? That title may not be the best, here's an example of what I'm looking for: http://www.teslamotors.com/en_CA/models
Notice how the image stays in the middle, and gets "shrunk" or reduced from both sides evenly, up to a certain width, and then the website stops shrinking.
I've tried my best, but can only achieve this in javascript using the window.onresize event call, and was wondering if there was a CSS way to do this.

A: You will need to apply a percentage width, along with a fixed min-width, and margin: 0 auto to keep it centered
.content {
    width: 70%;
    min-width: 400px;
    margin: 0 auto;
}

http://jsbin.com/isohAQe/1

redpajama_set_name: RedPajamaStackExchange


text:
Green Wave football coach Jim Kelliher has a simple message for his players when they first step foot on the Gillette Stadium turf tonight: Soak it in.
For the current generation of football players, Gillette holds the same revered status that the late, great Boston Garden did for their parents and grandparents.
"You go in there and let your body soak in the atmosphere because it's going to be exciting…It's the best place you can have a game," said Kelliher, who has won two of his five Super Bowl titles on that hallowed Foxborough field.
But as game time nears, the 11-1 Abington football team needs to let the aura drift away, and treat it more like a game at Memorial Field.
"[The Gillette field] is 100 yards long, 50-plus yards wide. You gotta get first downs. Everything is the same," Kelliher said.
"Enjoy the atmosphere but as soon as the game starts the atmosphere doesn't mean a goddamn thing, OK, because now the only thing you have to be concerned about is that group of guys on the other side, because they're trying to stop you from getting something done."
Those guys on the other side will be the Rockland Bulldogs. The same Rockland Bulldogs who play their games less than three miles away from the Green Wave. The same Rockland Bulldogs who have handed Abington their last three losses, including this past October.
"They want another shot at them. Redemption and all that stuff," Assistant Coach Ed Reilly said.
"We have a lot of respect for them and their program and their coaches and kids and I'm sure they feel the same way about us."
Senior captain Shea McClellan says the senior-heavy squad wouldn't be any less motivated if they were facing an unknown school from a different part of the state.
"The motivation is to just go out there and win," he said. "We're going to leave it all on the field."
This is a better Green Wave team than the one that played Rockland eight weeks ago, McClellan said.
"I think we've improved every week….there's always something new to learn every day," he said.
The last few weeks have been a bit of a roller coaster for the Green Wave. They easily handled Sandwich in the quarterfinals 34-0. But hours before its semifinal tussle with St. Mary's of Lynn, Abington found out it would be without Kelliher, who was confined to his home under state COVID-19 protocols. The Green Wave overcame a pair of second-half deficits to win 26-20 and earn not just a trip to the Super Bowl, but Kelliher's 300th victory as a head coach. Abington then shifted focus to its annual Thanksgiving Day showdown with Whitman-Hanson, which it won handily, 31-19. The Division 6 Super Bowl was originally slated for Monday, Dec. 6, but the MIAA announced earlier this week the game was being moved up three days to tonight, as Gillette juggled a possible Revolution playoff game on Sunday.
Reilly said the team knew the game date may be changed, and it has remained prepared and focused.
"This was never an issue for us," he said. "The experience these kids get, we'll take a little inconvenience any day of the week."
Reilly feels the Green Wave team is better positioned going into tonight's game with its border rival.
"We always say around here you don't really know what type of team you are or player you are until you go through some adversity. Losing a game helps you out in the long run and that's what we're hoping for," he said.
Kelliher says the team is ready and should represent the town well.
"The kids have earned it. We didn't have as good a game as we could the last time we met Rockland but we're playing with lots of excitement and enthusiasm and I think that should continue Friday night," he said. "We're feeling good."
Win or lose, tonight's game represents the final game the seniors will play together, a milestone McClellan says he's aware of.
"These are all my best friends. It's going to be sad, even if I go to play college football because these are the moments I'll never forget," he said. "I've played with these kids since we were youths, 10 years old, 11. It's going to be sad. I'm going to miss it."
Tickets for tonight's game must be purchased ahead of time through Ticketmaster.
Written by abingtonnews
View all posts by abingtonnews
Previous Entry Abington Celebrates Christmas
Next Entry SUPER BOWL UPDATE: Green Wave trails 23-7 at half


(℞) Prescription required. Product of Canada. Shipped from Canada. Clarinex Syrup is also marketed internationally under the name Aerius Kids Syrup.
Take this medicine by mouth. Follow the directions on your prescription label. Shake well before using. Use the specially marked spoon or dropper supplied with this medicine to measure every dose. Household spoons are not accurate. Ask your pharmacist if you do not have one. You may give this medicine with food or on an empty stomach. Take your medicine at regular intervals. Do not take it more often than directed. Talk to your pediatrician regarding the use of this medicine in children. Special care may be needed. This medicine has been used in children as young as 6 months.
Visit your doctor or health care professional for checks on your progress. Tell your doctor if your symptoms do not improve. You may get drowsy or dizzy. Do not drive, use machinery, or do anything that needs mental alertness until you know how this medicine affects you. Do not stand or sit up quickly, especially if you are an older patient. This reduces the risk of dizzy or fainting spells. Alcohol may interfere with the effect of this medicine. Avoid alcoholic drinks.
Keep out of the reach of children. Store at room temperature between 59 and 86 degrees F (15 and 30 degrees C). Protect from light. Throw away any unused medicine after the expiration date.


That's all you need to make this lovely relaxing bath soak. Pretty, isn't it?! After a long day at work, a nice hot bath with relaxing salts and mood mellowing lavender is just what you need.
This recipe is the simplest of simple! Even if you tend to be a DIY disaster, this is one project you'll ace- I promise.
All you have to do is combine the salt and lavender, and mix it up!
So delicate and pretty! And the lavender buds smell amazing.
But we're going to kick it up a notch and add some essential oil. Like I said, the buds alone smell fantastic, but adding a little additional fragrance takes this mixture to a whole new level. Oh, and the essential oil brings its own bag full of benefits that will make your body feel wonderful after your bath. Bonus!
Just a little! I used about 4-5 drops.
Now that the mixture is finished, all you have left to do is package it up.
Using a kitchen funnel, carefully fill the jar you've decided to use (make sure it has an airtight lid to lock in the fragrance).
would this work with regular epsom salt?
I have got a ton of it or half epsom salt and half dead sea salt?
Regular Epsom salt will be a bit to fine for this and not a therapeutic.
Hope this helps you Mariama!
Is this safe to go down a tub drain?
You should ensure that it properly devolved before going down the tub; in any case it would be best to contact plumber for technical advice.


US-based Atricore, Inc. is teaming up with Sylversys, bundling top tier security auditing capabilities with enterprise level identity and access management solutions throughout West Africa.
Africa-based IT security consulting firm Sylversys has partnered with Silicon Valley's Atricore in the latest expansion of IT security and IAM for the African marketplace. Properly known as Sylversys Consulting International, the firm has offices in Ghana, Mali, Senegal and Burkina Faso and is currently setting up operations in Nigeria. By combining Sylversys' local reach and IT infrastructure expertise with Atricore's first-class identity and access management solutions, the two companies can provide budget-friendly security to a market that is vital to the world economy and growing, yet traditionally underserved.
The partnership is especially promising in cases where enterprise or government entities need to implement IAM, yet have potential or ongoing security risks in their IT infrastructure. In these cases, expertise in auditing and mitigating security risk is essential to cut off potential or currently active cyber threats before implementing the identity and access management solutions that are vital to business success. In Africa's expanding marketplace, top-notch solutions to these challenges and the local support to implement and support them, has been sparse.
Cybercrime is a growing global phenomenon which, according to a 2013 report by Symantec, Inc., is increasing at a more rapid rate in Africa than in any other area of the world. Cybersecurity experts estimate that 80 per cent of personal computers on the African continent are infected with viruses and other malicious software.
Cybercriminals have long considered Africa as an opportune environment for their criminal acts. Statistics indicate that Africa is very prone to cyber-related threats due to the high number of domains, coupled with very weak network and information security. For organizations without a formalized information security capability, the creation from scratch of a security operations center that enables centralized visibility, alerting and investigation can be a daunting task. The combination of a quality security program backed with a strong identity and access management solution is a key success factor.
Silicon Valley-based Atricore powers businesses worldwide with quick and easy IAM, providing budget-wise and time-effective identity and access management solutions. For more information, please visit the Atricore web site at www.atricore.com.
SYLVERSYS Consulting International is a solutions integration firm with a specialty in providing secure computer and network products/solutions for businesses and organizations in the private and public sector. Find more on Sylversys at www.sylversys.com.


eBook Autmatas Programables Acceso Rpido available at elcentrohistorico.com with Format PdF, ePub, Audiobook & Magazine. Please Create a FREE ACCOUNT to read or download Autmatas Programables Acceso Rpido FOR FREE.
Finally I can download and read Autmatas Programables Acceso Rpido Thank you!


Allan Clausen and Peter Vadim. Still from film.
In Map in Steps (2014) we explore how body movements change perception of space. The concept is made in cooperation with Mille Jørgensen.
Our and other participant's body movements have in this process made new narratives of chosen places, which is documented on film.
The films are used in my thesis in landscape architecture where I explore how the meeting between body and space can be used in spatial analyses.
In the film 'The meaning of lamps, rails and ruderal species' we play with what appears as an abandoned and intimidating place in Copenhagen. The intention is to show other qualities of the place and hopefully discover new potentials.
In the film four people meet and their stories intertwine with each other and the place.
In another film Break in the Promenade we investigate a space in the inner city of Copenhagen that is supposed to attract companies, expensive flats and tourists. Like this it has another narrative than the spaces in the first film, but in many ways the space is intimidating because of the vast distances dominated by uninviting office buildings.
In a third film Stepping Out of Place we explore a larger area in the same neighborhood.
Below are visuals that emerged during the film making. They show suggestions for a more pedestrian friendly area.


Hazelnutsack and Mr. Serotonin like this.
angrycandy and SlappinCups like this.
angrycandy and Mr. Serotonin like this.
SlappinCups, angrycandy and Mr. Serotonin like this.
dadbolt and SlappinCups like this.
Joe4th, dadbolt and angrycandy like this.
Hazelnutsack and Borat like this.
dadbolt and angrycandy like this.
ChaseTx and Borat like this.
Borat and SlappinCups like this.
Borat, Rob Hughes and SlappinCups like this.
dadbolt, littlejohn and SlappinCups like this.


text:
Gulf Coast head women's basketball coach Roonie Scovel announces retirement
by: Courtney Mims
Posted: Feb 26, 2020 / 02:06 PM CST / Updated: Feb 26, 2020 / 09:58 PM CST
PANAMA CITY, Fla. (WMBB) – Gulf Coast head women's basketball coach Roonie Scovel announced she will be retiring after this season.
"I wanted to teach and coach and live at the beach so I kind of accomplished that goal then we just kind of put some wins and some graduation rates and completion rates," Scovel said.
Scovel has led the team for 22 years. In that time, she has an overall record of 623-86, 18 conference championships, 12 regional titles and six national championships.
Scovel said the decision was mainly due to wanting to spend more time with family. She also said she hopes to help with the search committee on finding her successor.
"Roonie's going out on the top of her game," Gulf Coast president Dr. John Holdnak, "nobody's better than Roonie Scovel there may be people that are as good but nobody will be better than Roonie's been."
Holdnak said the school will begin a national search for Scovel's replacement and hope to have a new coach hired in the next couple of months.
"You know the caliber of coaching that we're after is probably because of the legacy Roonie's built we're not looking for somebody that's starting their career we're looking for somebody that's at the peak of their career," Holdnak said.
Scovel said it's going to be hard to leave her Gulf Coast family.
"You go to bed at night, 'oh I'm gonna leave and then you wake up,' and say I can do this another year and that emotional side of leaving the family more than anything is hard," Scovel said. "But my dad once told me sometimes it takes more courage to leave then it does to stay and I've had to think about that a lot those words have been in my mind a lot lately."
However, she will always support the Commodores.
"I'll certainly always be a part of Gulf Coast," Scovel said.
More Local Sports Stories
NCAA golf returns with Camp Creek Seminole Invitational
by Emma Stamps / Jan 17, 2021
WATERSOUND, Fla. (WMBB)-- NCAA men's golf made its official return to play since the pandemic began at Camp Creek Golf Club on Sunday in Watersound.
The Florida State men's golf team is hosting the Camp Creek Seminoles Invitational men's ACC tournament.
Hundreds of adult flag football teams compete in world championships at Panama City Beach Sports Complex
by Courtney Mims / Jan 16, 2021
PANAMA CITY BEACH, Fla. (WMBB) - Around 400 adult flag football teams are competing in the Flag Football World Championships at the Panama City Beach Sports Complex this week.
Men's, women's and Co-ed teams are playing in multiple divisions from Thursday to Monday.
Bay County Disc Golf Club hosts 2021 kickoff tournament at Majette
PANAMA CITY, Fla. (WMBB) - The Bay County Disc Golf Club held their first tournament of 2021 on Saturday at Majette.
They had around 90 disc golfers participate in this year's Bay County Kickoff event and nine pro players.


Relax. The more relaxed you are, the more fun you will have. If you do your homework, you'll know what's expected during the audition. And no surprises = more opportunity for success.
Breathe! I know it's easy to forget, especially under pressure. But when focused on deep breathing you will have a better chance at relaxing throughout the audition.
Ask questions. The audition panel want to hear how you think creatively. When you have an opportunity to use your voice, speak up.
Listen. Make sure that you listen carefully to instructions. And don't speak over other dancers asking questions.
Learn to recover. You are going to make mistakes (after all you are human). But knowing how to recover takes skill.
Be yourself. Perform the movement how the choreographer suggests, and use your own interpretation when given the freedom to do so.
Perform with your eyes. Watch out for "class face" when you're concentrating so hard, you forget to communicate with your eyes.
Don't over think the choreography. Like tip 1 and 2, focus on relaxing and breathing rather than putting too much emphasis on the steps.
Dress appropriately. Know what style the director is looking for. You don't want to wear a skirt if there is a ton of rolling on the floor.
Arrive early. And make sure you're warmed up. Auditions often start with learning choreography without time for conditioning.
Eat! Please ensure that you have enough energy to get through a long audition. Bring water and extra snacks that do not require a clean up crew to eat.
Use the space to your advantage. If the space is crowded, look for the least dense space (often called the negative space) and go for it.
Our mission is to amplify the talents of dance theatre artists and to enhance the public's appreciation of dance theatre through performance, education and advocacy.


Celebrate everyday with MasKingdom. Indulge and immerse yourself in the kingdom of mask. With MasKingdom, a mask is more than just a daily regime, it becomes an experience and indulgence to the senses. MasKingdom focuses on using high quality material for the construction of the mask – Japanese silk and incorporating premium ingredients such as truffles, pearl and Chinese herbs to improve the quality of your skin, giving you a younger looking appearance.
With I-Wish Mask Series, sharing the joy or blessing is as simple as buying a gift. I-Wish Mask comes in 12 different themes, each customized with a different special occasion and good wishes.
MasKingdom presents to you their adaptation of the classic fairytale, Red Riding Hood. Opening up a new field of beauty with truffles to bring consumers a sense of childhood happiness. A premium mask range with truffles and top quality ingredients such as wine, pearl and chocolate. With an exclusively illustrated Red Riding Hood Character that brings each mask theme to life.
Incorporating Chinese medicine and therapeutic to enhance the well-being of oneself, is a common practice in Chinese culture. MasKingdom's Chinese Medicine Mask comes in 12 different combinations integrating all the quintessence of Chinese Empresses beauty regime and beauty care that has lasted for 5000 years. Incorporating Chinese herbs such as Angelica Sinensis (for fairer radiant skin), Roseroot (for moisturizing and rejuvenate skin) and Red Jujube (for skin tightening and firming).


Caregivers Wanted! If you are experienced, compassionate, solution oriented, love to help others, and want to be part of a first-class team, we want to hear from you!
Thank you for connecting with us. We will be in touch shortly.
Will you care for pets?
Willing to work on Consumer Directed Program?
MAYBE If YES, full benefits (health insurance, sick pay, vacation) 2 days per week.
Experience Working With Team of Other Aides?


I'm honored to have been invited by Studio Art Quilt Associates (SAQA) to speak on an artist panel at SAQA's symposium on May 23 during Quilt National '15 opening weekend at the Dairy Barn Arts Center in Athens, Ohio. Moderated by Patricia Kennedy-Zafred, the panel will be a diverse mix of artists featuring Inge Hueber, Kathleen Loomis, and Judith Plotner.
At the same time, I'm excited I'll finally be able to show my quilt "London – Wish You Were Hair" that is part of Quilt National '15, the 19th biennial juried exhibition of innovative art quilts at the Dairy Barn. The exhibition will be open to the public May 23th through September 7, 2015. The eclectic collection 86 innovative quilts, never before shown artworks represent the work of talented fiber artists from 33 states and 8 foreign countries.
More than 6,000 visitors are expected from all over the world to see Quilt National '15. After Athens, parts of the collection will travel to museums and galleries throughout the country until late 2017.


text:
1985 Feb 21 Th
Press Conference at British Embassy in Washington
British Embassy Rotunda, Washington DC
Thatcher Archive: COI transcript
1000-1035. The transcript begins in mid-sentence.
Agriculture, Autobiographical comments, Defence (general), Defence (arms control), Defence (Falklands War, 1982), Economy (general discussions), Monetary policy, Privatized & state industries, Trade, European Union (general), Foreign policy (Americas excluding USA), Foreign policy (Australia & NZ), Foreign policy (Middle East), Foreign policy (USA), Foreign policy (USSR & successor states), Foreign policy (Western Europe - non-EU), Northern Ireland, Terrorism, Strikes & other union action
Prime Minister (starts in mid-sentence)
… . the real value of the visit has been the opportunity, which we have seized, to put over the British point of view to the Ronald ReaganPresident, the United States Administration, Senators and Congressmen and, indeed, to millions of American people, on a very wide range of issues.
Arms control, of course, has been high up on the agenda and I hope that we have been able to contribute our views to the United States approach to Geneva and we have reaffirmed the four points on the Strategic Defence Initiative which we agreed at Camp David.
On East-West relations I found, particularly in my talks with Congressmen, a very very strong interest in making greater efforts at dialogue with the Russians and getting to understand their viewpoint the better and to having more contacts. They were very interested in what we had done and in the viewpoint which we put.
On economic issues, I need hardly tell you they have ranked fairly high, very high. The pound, the dollar, deficits, interest rates, protectionism, unemployment. On these and other subjects we had an excellent discussion over breakfast this morning with Secretary Shultz, with Mr. Baker, Mr. Block, [end p1] Mr. Brock, Mr. Baldridge and Mr. Walley.
On the British economy, I have sought to give a very clear picture of the British economy. In fact, as you know, as I indicated in the speech yesterday, apart from the fundamental problem of unemployment, which is of great concern, the British economy is performing at record levels of output, record standard of living, record investment.
I spoke yesterday in Congress and also was asked about Northern Ireland and our approach to the problems of Northern Ireland. We have stressed two things: first, the need not to do anything to support financially the IRA or in any other way, and have stressed how greatly that viewpoint has support from the Republic and we were of course helped very much in that by the action which Garret FitzGerald took while we were here in passing a law to prevent funds from going—particular funds—from going to the IRA. We also stressed the excellent relationship between the two governments headed by Garret FitzGerald and myself in trying to consult together to take forward a solution in Northern Ireland leading to stability and peace, and that any changes can only come about by consent, and that is fully understood both by the people who constituted the New Ireland Forum south of the border and by the other people in the Republic.
Finally, we discussed at considerable length the Middle East where, as you know we feel that the time is propitious for a new initiative. We very much favour the approach taken in the United States-Saudi communique and hope that matters there will gradually be taken forward.
We also had, of course, a brief discussion on Central America and you will have noticed that I pointed out perhaps what [end p2] is not as fully known this side of the Atlantic as at home, that we do keep troops in Belize at that government's request. It not only helps to keep democracy stable and firm in Belize, but it is our contribution to democratic stability in Central America.
I think … I am sure I have some more things to say but I think perhaps I have said enough and I will leave it to your questions now. [end p3]
Prime Minister, you mentioned that the economic issues were of primary importance. Do you think you are getting any message through to President Reagan about the necessity of getting the deficit down?
Well, I do not think he needs any messages to urge him to get the deficit down. I think he is very much aware of that and, of course was from the moment of the State of the Union Message last year, not this year, with the £150 billion down-payment and, of course, as you know, he has put quite fundamental changes to Congress in this State of the Union Message. So I do not think he needs any advice on that. The question is by how much and how and I found on Capitol Hill yesterday, indeed I found all over Washington, really what you are also saying: there is a recognition of the need to get the deficit down, because otherwise the cost of servicing the debt will be adding to public expenditure and that is the last thing the President wishes to do. It is how much and how, and at home, you know, that also happens. Everyone seems to be in favour of a lesser proportion of public expenditure in principle. It is the precise ways of reducing it on which the debate will occur.
Indeed, you do not have to tell me and you do not have to tell anyone in Washington that that is the case and that of course gives you the enormous burden that is going to come on public spending as the servicing of debt becomes a bigger proportion of public expenditure and that of course is one of the [end p4] reasons why the President is so anxious to reduce the deficit.
Madame Prime Minister, there was a belief among many Western officials during the intermediate range, medium range talks with the Russians that they never negotiated in earnest because the United States had not actually begun to deploy Cruise and Pershing missiles; that we were trying to trade off paper missiles for Soviet concessions.
With the Strategic Defence Initiative, what gives you or indeed any leaders any confidence that the Soviets would be willing to make concessions on their offensive strategic missiles for a system that is so many years off in the future and indeed, is only at the very early stages of its research?
Now, as far as Cruise and Pershing were concerned, there was undoubtedly a tremendous effort on the part of the Soviet Union to have some propaganda effect on people in the Western democracies to try to prevent the deployment of Cruise and Pershing. They were not successful. Indeed, the actual deployment was of great significance during the year in which it occurred and therefore the failure of the Soviet propaganda effort, that also was of great significance.
You then go on to equate some of the problems with SDI. Can I say how grateful I am to you for pointing out what I think is not sufficiently realised when people discuss this: there is an enormous long time between starting research, many [end p5] many years, and coming to any possibility of deployment. Some people, I am afraid, tended to telescope the time far too much.
Now, what gives me hope for reductions in nuclear weapons? And I am very well aware of what you are saying, that if only a proportion get through, then the first reaction could be well we have got to have more.
What gives me hope? I think really it is two things. I think it is the nature of the weapons themselves and the belief that we really have too many, and secondly, I think both the Soviet Union and the West wishes to maintain our security, but at a lower level of weaponry and at a lower level of cost. Now, to maintain our security, you have got to maintain the balance but at a lower level, of numbers, and therefore at a lower level of cost. And I think that there is not only the common interest in seeking to avoid conflict, because that occurs whether you belong to a democratic nation or whether you wish, in a Communist country, to put more into improving the standard of living, but I think there is a real wish to reduce the number of weapons and to reduce the cost.
All of a sudden, a number of things have come together, which I believe makes this possible. Not yet achievable, but possible.
Were you reassured here, Mrs. Thatcher, that the Reagan Administration would be willing to delay deployment or negotiate on the Strategic Defence Initiative in return for Soviet concessions? [end p6]
If it comes to deployment, then you have to negotiate, as the Ronald ReaganPresident indicated. We dealt with that at the Camp David communique. We dealt with it also in the statement he made yesterday after our talks. Deployment comes under the Anti-Ballistic Missile Treaty, which as you know is a treaty without terminal date and it is acknowledged that if it comes to deployment you must negotiate. Do not forget the Soviet Union will also be doing research and in some ways it is ahead of us in things like an anti-satellite capability.
Getting back to the economic issues, you complained in your speech about …
Complained? I did not complain at all!
Question (same man)
… . about the strength of the dollar, the US dollar. I am wondering, in your private discussions with the President, did you have any advice for him on the dangers the strength of the dollar might pose to the rest of the world? What were your private deliberations with him on this?
We are all aware of the problems of the mounting strength of the dollar. It is not only problems for the rest of the world. [end p7] It is of course also problems for the industries in the United States which are based on exports. We do not know how long the resurgence of the dollar will continue, and in that sense, that we do not know, we are both trying to foresee what will be the effect both on the world and also on United States industries if it does continue.
I am afraid we have not any rapidly ready-made answers for it. I think we both believe that there are certain inherent balances in a market economy that will eventually turn it round, because of the adverse effect it would start having on great sectors of the American economy, and that too will be a factor which you expect to start to turn it round. When or how that will come, one does not quite know. I cannot pull out a whole series of sudden new answers, because at the moment I do not believe there are any. We had to put up our interest rate for a number of reasons. It was perceived that our money supply had got slightly slack. Sterling is holding slightly better than some of the other European currencies. We were all affected nevertheless again this morning by the resurgence of the dollar and we are all discussing the matter along with the deficit. It seems to us that the only fundamental thing that can be done is the reduction of the deficit. Now, precisely what effect that would have on the dollar is very arguable, very arguable.
Mrs. Thatcher, what did you talk to our Secretary of Agriculture Block about and our Ambassador Brock? Did you give them any assurances of any help for our problems on trade? [end p8]
We are very much aware of the problems concerning agriculture both this side of the Atlantic and in Europe, and the fact that there could be a conflict here between the two and we will do everything we can, as far as Great Britain is concerned, to try to avoid that conflict. The United States has great surpluses, Europe has great surpluses, and there are considerable subsidies both sides of the Atlantic for those surpluses and we do not wish to get into competition in selling those surpluses and competitive subsidies.
I note very much what the Ronald ReaganPresident has proposed in his message to Congress about agriculture. We in the Community are trying to hold down the prices for agricultural products in surplus and the Commission has proposed zero price changes this year overall. I again cannot give you a sudden solution. Just to say that of course we discussed it. We discussed the problems of agriculture here, which are very well known to us, and the problems of the Common Agricultural Policy and its effect on the United States we also discussed in detail.
… . Back home, the miners' special delegate conference has given full support to Arthur Scargill to continue the strike. Can you give us your reaction to that please. [end p9]
Naturally, I am disappointed, but when I agreed to see the TUC and when we asked the National Coal Board to take into account the points raised by the TUC, providing always that we maintained fully the right of the National Coal Board to manage the industry and their final decision after all due procedures have been followed, their final decision and right to close uneconomic pits, then there was a very detailed document which we had understood would not be a basis for negotiation, but which would form part of a settlement. The document itself was not to be a basis in any way, and the TUC also accepted that. So we were always ready to try; that we did not succeed did not fundamentally surprise me, because I have had to take the view by driving necessity of the evidence that the NUM Executive has not moved its position since the start of the strike and that the position which has been adopted is totally different from that ever taken by any other NUM Executive or any other trade union in industry.
So yes, I am disappointed, but for reasons of past experience and for reasons of what the NUM Executive has been saying, I had not really allowed my expectations to get too high. Disappointing but perhaps more miners will consider themselves now what to do.
Madam Prime Minister, what were your suggestions and advice you gave to President Reagan on arms control and secondly, what are the East-West affairs you discussed with him in the Congress? [end p10]
What did I advise about arms control? Well, we do not necessarily reveal all the advice and all the discussions which we have. Our interest is the same on trying to secure reduction on both intercontinental ballistic missiles and on the intermediate missiles, and the question is how to bring that about. I believe that the Soviet Union also is interested in that, but it is not going to be easy to decide tactically how to handle the opening rounds, and obviously that will be the subject of very intense consideration during the coming days, as it has been during past days. But I would be surprised if the final tactics are determined more than a few days before because continual discussion usually raises new facets of the problem, and it always helps to discuss it with someone else.
What other subjects did we discuss? Of course, we discussed Central America.
East-West: I found the greatest possible interest in the view that we have taken in Britain that we really must try to have more talks with more members of the Soviet Government. You know that that arises from the viewpoint that we had taken that we should do that and from the visit of Mr. Gorbachev to Britain. I think that you are the better likely to get good results from arms control talks if you have more knowledge of the people whom you are negotiating with; more understanding of their concepts and their ideas; and therefore the approach that they are likely to take and also more understanding of the kind of reassurances from the West that they are likely to require. And you will understand the need for that because of certain thing I said in my speech [end p11] yesterday, because one of the things that I have found as I have gone round in the last year is the great difficulty of convincing some of the Soviet Union and of the Warsaw Pact countries that the United States and the West are absolutely sincere in wanting armaments reductions, and that the whole tendency of democratic peoples is of the way of the kind of people we are, to want perpetual peace, but to want it and to make certain that the defence of our values is secure.
So I do think that if we are to get better results in arms control talks we ought to have more dialogue and more understanding of one another's viewpoint, because they want security too.
Madam Prime Minister, Dame Rebecca West once said, with respect to you, that men would rather be ruined by one of their own sex than saved by a woman. Is there any one event in your early life that comes to mind that was instrumental in forming your character and later on you took over the leadership of Great Britain's leading establishment … .
I do not think one's character is formed by one event. As I said, I have been at it nearly sixty years now and I cannot remember any one event that was outstanding. I think it is just the cumulative effect. [end p12]
Madam Prime Minister, ever since the period of Gorbachev 's visit to the United Kingdom, there have been problems with various of the US allies and a number of Commonwealth nations. New Zealand, Australia, and so on. Canada, of course, has had long-standing opposition to policies involving the defence of the West. Recently, a dispute has arisen involving the O1 stations that are on Canadian territory. You yourself sent your Foreign Minister, Geoffrey Howe, to meet with the government of Bulgaria, which has been considered anathema in many Western circles.
How much do you know, or how much can you tell us about the deal which was struck between Queen Elizabeth, Lord Peter Carrington and Gorbachev?
The Queen did not see Mr. Gorbachev. I simply do not understand. The Queen did not see Mr. Gorbachev. Point No. 1, we did not have any deal struck between Great Britain and the Soviet Union through Mr. Gorbachev. There were not any deals were struck, so you are asking a question on the premise that deals were struck. The premise is wrong, so the question falls. That is plain straightforward logic. Now what was the other question?
New Zealand. Can I just go on, because you did ask quite a complicated question which must have taken you a very long time to work out! New Zealand. I am as disappointed as you are in the approach taken by the David LangeNew Zealand Prime Minister. He is very much aware of my views. He is saying that no ships can visit New Zealand unless there is a clear declaration to the effect that they do not carry nuclear weapons. He knows my view and I [end p13] will just repeat it: that all our ships are seconded to NATO. At any moment's notice they might have to be asked—instructed—to take up NATO positions, and therefore they must carry whatever is appropriate to their NATO task, and I have no intention whatsoever of revealing whether or not a nuclear armoury is part of their weaponry aboard any particular ship, and therefore either they must not ask whether they are carrying them or must accept that if they ask we will not say. I shall be very disappointed if Royal Naval ships cannot visit New Zealand. The people of New Zealand are very close to the people of Britain and I think they will be disappointed too, but I cannot answer and will not answer that question.
Now, Canada: can I just point out that Canada did do some testing of Cruise missiles on her territory, and that was, I think, her contribution to getting the Cruise missiles deployed on time. So I think we can get over most of these problems, but I confess I am very worried about the New Zealand one.
Are you speaking … . (inaudible) … .
Look! I can only speak—as you would know—if I might very respectfully say to you the question is superfluous. The only government I can speak for is the Government of the United Kingdom. Other governments are totally independent. [end p14]
You have twice today mentioned your conversations with President Reagan on the subject of Central America. May I ask you, are you in full agreement with the President on his view that US support of the Contras in Nicaragua is a moral responsibility, a moral duty of the United States, in the same way that it would be to support the rebels in Afghanistan?
That is a matter for the Ronald ReaganPresident. I do not interfere in the view which he takes. That is a matter for the President.
Prime Minister, can I return to the question of the coal strike. Given what has happened, to avoid further disappointment would it now be wise to refrain from making any further attempts at negotiation until more than half of the miners are back at work?
We made this one last effort. I do not see any prospect of any further effort.
Yesterday, you spoke about the presence of British troops in the South Atlantic. Do you have any plans, or are you considering any new ideas, to get the talks with Argentina on the Falklands dispute moving again? [end p15]
No, certainly not! The Falkland Islands are under British sovereignty; their people wish most earnestly to stay British. Their wishes are paramount. That is a right to self-determination enshrined in the United Nations Charter. A nation now like Argentina, which has just come to democracy and has expressed its own self-determination, cannot require self-determination for itself and deny the same right to others.
Prime Minister, have you drawn any conclusions about the role of intervention in foreign exchange markets from your discussions? And if the pressures on sterling continue, would you be prepared to increase interest rates again?
Has one drawn any conclusions? I do not think there are any that I can … . just pull out of the hat. No, as you know the dollar is surging again this morning and the Deutschmark has gone down again. It must be a new fifteen-year low for the Deutschmark and, as you know, you will be the first to know. You always have a go about interest rates and you always know that I cannot answer.
Prime Minister, yesterday on the Hill, you made an understandably negative allusion to Adolf Hitler and you quoted Bismark pejoratively. With the 40th anniversary of the end of World War II coming up, how deep is Anglo-West German [end p16] reconciliation and how will your government and you personally observe May 8th this year?
How … I'm so sorry. The last part of your question …
How will your government … . I understand Baroness Young made an announcement that may be taken back. How will you observe the anniversary this year on May 8th?
The Federal Republic of Germany is a staunch member of NATO and the Western Alliance and she is a very true and faithful member of the Western Alliance.
With regard to how we will celebrate VE-Day and the celebration will also include the memory of those who have lost their lives in the Far East and recollection of their sacrifice, we propose to do it by having a service on VE-Day in Westminster Abbey where, of course, there is the tomb of the unknown warrior. And there will, of course, be a number of other special celebrations by various parts of the Armed Forces or by various groups of our people, but those will be privately organised. The main observance of VE-Day will be by the service in Westminster Abbey attended by the Queen.


text:
Maria Camacho appointed to Lower Los Angeles River Working Group
River LA is thrilled to announce the appointment of our Director of External Affairs, Maria Camacho, to the Lower Los Angeles River Working Group. The appointment by State Resource Secretary John Laird helps us in our long standing mission to ensure that all 51 miles of the LA River are included in ongoing revitalization efforts. We are especially thankful to Speaker Anthony Rendon for his commitment to that vision and for creating this working group so that no community is left behind and the Rivercan be a resource and playground for all.
Eli Kaufman
The Los Angeles River captured Eli's imagination the first time he laid eyes on it...eight long years after moving to LA. His zeal to share the story and the possibility of the 51 miles is motivated by how integral it is to the health, prosperity, and culture of the region he now calls home. Eli is thrilled to do his part to help LA become a more walkable, bikeable and people-centric city.
As Creative Director, Eli builds brand awareness, advocacy, and engagement for River LA. He works across the organization and with external partners to implement communication strategies that resonate with existing audiences, while also finding meaningful ways to engage new audiences with the river.
Prior to joining River LA, Eli was a Creative Strategist at A Hundred Years, a creative consultancy that leverages design and technology to create long-term impact. While at A Hundred Years he developed the narrative logic and facilitated workshops around the digital experiences he co-created for partners including The Robert Wood Johnson Foundation, TED-Ed, The Rockefeller Foundation, ONE.org and Disney Imagineering among others. Between 2011-2013, Eli served as the Head of Video Production at GOOD Magazine where he developed, produced and/or directed video campaigns for brands including The GAP, Starbucks, Ben & Jerry's, FedEx, Apollo, IBM, and The Tiger Woods Foundation. His GOOD work has screened at numerous film festivals as well as LACMA, TEDx, and has been featured on the front pages of YouTube, UpWorthy and Soul Pancake. From 2008-2011, Eli was the Senior Content Producer for Film Independent's diverse educational programs as well as the Spirit Awards on IFC and The Los Angeles Film Festival at LA Live. While at Film Independent, Eli was fortunate to interview many of his Indie-Film heroes and continues to draw inspiration from the insights they shared.
Eli earned his MFA at UCLA's School of Film, Television and Digital Media with a concentration in Directing and has a B.A from Oberlin College in English and History where he played four years Varsity Lacrosse. He is a founding parent of the IKAR Early Childhood Center Garden, serves as a mentor for Creative Visions Foundation and beats traffic as a bicycle commuter and Metro rider.
His ideal weekend in Los Angeles involves having adventures around town with his son and a few hours gardening in his raised bed with their pit bull Nala.


text:
Q: Copy/Clone and Print Chart. Problems with ActualWidth & ActualHeight I am trying to print a chart generated during a report. I am able to put the chart on a DocumentPaginator document, but I am having trouble resizing the chart to fit the page. I noticed that if I changed the size of the reporting program which would change the Charts size would affect the scaling of the Chart. This realization showed me that the Chart's ActualWidth and ActualHeight were directly linked to the scaling.
I tried:
myChart.Width = newWidth;
myChart.Height = newHeight;

Measure(myChart.RenderSize);
Arrange(new Rect(0, 0, newWidth, newHeight));

But this caused my visual Chart in the reporting program to resize and the printable chart wouldn't resize to the new size until the second print.
Realizing that myChart was connected to reportChart I tried to copy/clone reportChart to myChart.
I tried:
public class Copy<T>
{
    public static T DeepCopy<T>(T element)
    {
        string xaml = XamlWriter.Save(element);
        StringReader xamlString = new StringReader(xaml);
        XmlTextReader xmlTextReader = new XmlTextReader(xamlString);
        var DeepCopyobject = (T)XamlReader.Load(xmlTextReader);
        return DeepCopyobject;
    }

}

or
myChart = XamlReader.Parse(XamlWriter.Save(reportChart.DataContext)) as Chart

but string xaml = XamlWriter.Save(element); would take too long and both would cause a stackoverflow.
I am using
myChart = new Chart() { DataContext = reportChart.DataContext }

to make my copy, but ActualWidth and ActualHeight come across '0' so I can't tell if the Chart's DataContext copied correctly.
I did get my Chart to resize using
myChart.Width = newWidth;
myChart.Height = newHeight;

myChart.Measure(new System.Windows.Size(newWidth, newHeight));
myChart.Arrange(new Rect(0, 0, newWidth, newHeight));

or to say my Chart's ActualWidth and ActualHeight to update to the size I want, but I am getting a black image on my document where the chart should be.
So how do I print a chart with it properly scaled to a selected paper size?

A: So I found something that works for me. I don't feel it is the cleanest way to do it.
Since I need to scale the Chart I am trying to print I need to copy/clone the Chart.
I used myNewChart = new Chart() { DataContext = myOldChart.DataContext } like stated before.
I added a new window to my project, and rendered my new chart in there so I don't get a black image from it.
ConvertingWindow.xaml Code. This code matches my orignal Chart's code.
<Window x:Class="QScanReportPrinting.ConvertingWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ConvertingWindow"
    xmlns:cht="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit">

<Grid>
    <Grid.Resources>
        <!-- CutomColumnStyle Style -->
        <Style x:Key="CutomColumnStyle" TargetType="cht:ColumnDataPoint">
            <!--Background Color-->
            <Setter Property="Background" Value="{Binding barColor}"/>

            <!--Annotations, or column value labels-->
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="cht:ColumnDataPoint">
                        <Grid>
                            <Rectangle Fill="{TemplateBinding Background}" Stroke="Black"/>
                            <Grid Margin="0 -20 0 0" HorizontalAlignment="Center" VerticalAlignment="Top">
                                <TextBlock Text="{TemplateBinding FormattedDependentValue}" FontWeight="Bold" Margin="2">
                                    <TextBlock.RenderTransform>
                                        <RotateTransform Angle="-60" />
                                    </TextBlock.RenderTransform>
                                </TextBlock>
                            </Grid>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Grid.Resources>

    <!--Chart for Graph-->
    <cht:Chart x:Name="UI_Chart" Title="{Binding GraphTitle}" Background="White">
        <cht:Chart.Series>
            <cht:ColumnSeries Title="{Binding ChartKey}" ItemsSource="{Binding GraphDataCollection}" IndependentValueBinding="{Binding Path=X}" DependentValueBinding="{Binding Path=Y}"
                              DataPointStyle="{StaticResource CutomColumnStyle}">
                <cht:ColumnSeries.IndependentAxis>
                    <cht:CategoryAxis Orientation="X">
                        <cht:CategoryAxis.AxisLabelStyle>
                            <Style TargetType="cht:AxisLabel">
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="cht:AxisLabel">
                                            <TextBlock Text="{TemplateBinding FormattedContent}">
                                            <TextBlock.LayoutTransform>
                                                <RotateTransform Angle="-60"/>
                                            </TextBlock.LayoutTransform>
                                            </TextBlock>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </cht:CategoryAxis.AxisLabelStyle>
                    </cht:CategoryAxis>
                </cht:ColumnSeries.IndependentAxis>
            </cht:ColumnSeries>
        </cht:Chart.Series>
    </cht:Chart>
</Grid>

Then in my VM I call.
    private void GetChartVisual()
    {
        // Initialize variable
        cw = new ConvertingWindow();

        cw.UI_Chart.DataContext = myNewChart.DataContext;

        // Set MainWindow to be the owner of this window
        cw.Owner = Application.Current.MainWindow;
        // Set DataContext to this DataContext
        // Allows binding with variables already loaded
        cw.DataContext = this;

        cw.Show();

        myNewChart = cw.UI_Chart;

        cw.Close();
    }

By doing this it renders my visual. I then can resize it to what I want and not affect my original Chart. Not the prettiest thing, but it works.


Reichert Metavar IK Trinocular Microscope System. (2) 8X PK Eyepieces. Good, clean condition given the age of this microscope with minor paint wear. Fully Functional (all lenses appear to be fully functional and adjustments operate smoothly). Visit this link (although in German) for more information on this telescope. PLEASE SEE PICTURES FOR FULL DETAILS AND MESSAGE ME FOR ANY QUESTIONS OR CONCERNS. The item "Reichert Metavar IK Trinocular Microscope System with Illuminator VINTAGE RARE" is in sale since Tuesday, August 11, 2015. This item is in the category "Business & Industrial\Healthcare, Lab & Life Science\Lab Equipment\Microscopes". The seller is "boarderneal" and is located in San Luis Obispo, California. This item can be shipped to United States, to Canada, to United Kingdom, DK, RO, SK, BG, CZ, FI, HU, LV, LT, MT, EE, to Australia, GR, PT, CY, SI, to Japan, to China, SE, KR, ID, TH, to Belgium, to France, to Hong Kong, to Ireland, to Netherlands, PL, to Spain, to Italy, to Germany, to Austria, IL, to New Zealand, SG, to Switzerland, NO, SA, UA, AE, QA, KW, BH, HR, MY, CO, PA, JM, to Taiwan.


At 7-15 overall and 2-4 in the Heartland Collegiate Athletic Conference, Franklin College has struggled.
Since Oct. 5, however, it has been a pretty good stretch. The team has lost only one match since then, which came against Spalding College. Franklin freshman Taylor Parrish, a Vandalia graduate, has been a big part of that turn-around.
The Grizzlies have defeated Manchester College (3-2), Indiana University-Northwest (3-1) and Earlham College (3-1).
The Vandalia Jr. Pro boys basketball camp will begin on Oct. 29 and conclude on Nov. 12 during Red/White night.
Boys in grades K-6 may register for the camp, which will emphasize individual attention to develop skills.
Teaching kids to enjoy the game is one of the primary objectives of the camp.
Order forms for Vandalia football playoff T-shirts, lone-sleeved T-shirts and hooded sweatshirts are available at the Vandalia Community High School office until 3:30 p.m. on Wednesday. All orders must be completed by that time.
The Vandalia High School football on Friday night clinched its spot in the playoffs with its sixth victory, a 20-14 win against Pana. The playoff appearnace will be the team's first since 2008.
Seniors Bryan Hosick and Levi Ulmer, and junior Ryan Ambuehl all scored rushing touchdowns for the Vandals (6-2), and Hosick intercepted a pass with less than 30 seconds left to seal the win.
Soccer player. Baseball player. Eagle Scout. Band member. Scholar Bowl member. Aspiring valedictorian. Aspiring chemical engineering major.
And that's just part of the life of Vandalia senior Christian Schroeder, who finished his high school soccer career on Friday.
So how does one juggle all of those responsibilities, anyway?
Junior Blake Swofford will be Vandalia's lone representative at the boys state golf tournament, and junior RaeChelle Leiken qualified for the girls tourney.
After shooting a 79 at the Carlyle sectional tournament on Monday, Swofford just made it through the cutoff for advancement to this weekend's event.
Being that close, however, made him a bit nervous as he closed out his round, considering that he missed the state tournament by one stroke last season.
It is possible for a team with five wins to miss the football playoffs, but in the Vandals' case, even if they lose the final two games of the season, they should still get in.
A 42-8 drubbing of Southwestern last Friday night – led by four touchdowns by Ryan Ambuehl and a career-high 196 yards from senior Levi Ulmer – gave the Vandals their fifth win, and if historical trends continue, that will be enough for Vandalia to qualify.
HILLSBORO – Seniors Abby Hickerson and Callie George were named all-South Central Conference on Saturday, after placing third in doubles play at the SCC Tournament.
Getting that honor, however, turned out to be quite a challenge for the duo.
Facing the team of Gianna Paden and Breanna Speraneo from Hillsboro after a first-round bye, George and Hickerson had to take the match to three games before closing out the 4-6, 6-2, 7-5 second-round victory.
Included was winning the final three points of the third game.
The Vandalia High School volleyball team earned its 20th win of the season on Monday, with a 25-18, 25-12 win at Stew-Stras.
Against Stew-Stras, junior RaeChelle Leiken and sophomore Megan Godoyo led the offensive attack, recording a combined 13 kills.
Leiken was also strong at the service line, scoring two aces. Senior Haley Wollerman also served two aces, and had eight assists.
Vandalia got its 19th win at Litchfield last Thursday, 26-24, 25-14.


Having heard a new term is becoming a daily routine. It's even more complex for marketers!
Among all, Content Marketing & Inbound Marketing have been here for a long time. But are we really aware of their meaning and influence?
Content Marketing & Inbound Marketing have their fair share of similarities and differences. They are also in some ways complementary but they are not the same!
In simple words, content marketing is the act of using content – any kind and in any form of distribution- with the aim to reach your marketing objectives. The most important point to consider here is that your content should be valuable, consistent and relevant to your target audience.
And how about Inbound Marketing?
Inbound marketing can be expressed as the approach to get found online through search engines and on sites like Facebook, YouTube, Twitter, and others according to David Meerman Scott, as published in the book Inbound Marketing.
In other words, Inbound Marketing is a form of Content Marketing customized for new digital marketing era, but it will not be sufficient alone. In order to perform successful inbound marketing, we would need content in the first place.
With the recent rush of digitization, it's no surprise that we tend to forget the traditional marketing. Although it would not be as effective as it was before, we should remember there is a real world out there. Sometimes offering a tangible piece of content such as a print would go a long way.


text:
Hi-Tech Fiber Group Corporation is a subsidiary of China Hi-Tech Group Corporation, which is a subsidiary of Sinomach The company aims to build a R&D and production base of new bio-based fiber and products, to become the most competitive bio-based fiber engineering technical service provider and engineering contractor in China, and to build a new fiber material industry group with the largest scale, the most advanced technology and the highest level of automation control in China. The company will build into the most innovative and competitive enterprises in the field of new materials, and make contributions to accelerating the construction of the national new fiber industry, strengthening the national scientific and technological strength, accelerating the modernization of national defense, and improving the quality of people's lives.
The company takes advantage of technology and equipment of China Hi-Tech Group Corporation, actively integrates new fiber material technology, engineering and equipment resources at home and abroad, and focuses on the development of high-performance, new environment-friendly, renewable fiber materials with high scientific and technological content. At the same time, the company is committed to the use of modern science and technology to promote industrial technological progress and upgrading and lead the development of the industry.
亚博官站The main business of the company includes the production and sales, R&D and engineering technical service of differential viscose, lyocell fiber, polylactic fiber and products, differential polyamide fiber and new bio-based yarn, etc..
The main wholly-owned and holding subsidiaries under Hi-Tech Fiber Group Corporation include Baoding Swan Fiber Co., Ltd., Weifang Xinlong Biomaterial Co., Ltd., Ecospire CHTC Co., Ltd., CHTC Sinofiber Wuxi Co., Ltd, Hi-Tech New Materials Technology&Engineering Co., Ltd. CHTC New Material Engineering Co., Ltd., Hi-Tech Polyace Biobased Fiber Co., Ltd., Hi-Tech (Jiangxi) Textile Design Institute Co., Ltd., Hi-Tech (Anhui) Architecture Design & Research Institute Co., Ltd., Jiangsu Mingyang Chemical Fiber Co. Ltd., Baoding Branch of Hi-Tech Fiber Group Corporation and CHTC Bio-based Material Engineering Technology (Ningbo) Co., Ltd.


Wynkoop Brewing Company and the Brown Palace Hotel have teamed up for a series of special cask-conditioned beers for the hotel's famed Ship Tavern bar. Historically, high tea was served in the space where the ship tavern now resides. As a tribute to this, the second beer to debut in the "Palace Caskcraft" series is a customized version of Wynkoop's London Calling IPA with the addition of Earl Grey Tea from the Palace tea program. The Earl Grey IPA has complex flavors of chocolate and bergamot, with mild florals to round out this smooth english cask ale. Stop in to the Ship Tavern to try this extra small batch Wynkoop release.