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

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.grinder.SingleConsole;
import net.grinder.common.GrinderProperties;
import net.grinder.common.processidentity.AgentIdentity;
import net.grinder.console.communication.AgentProcessControlImplementation;
import net.grinder.console.communication.AgentProcessControlImplementation.AgentStatusUpdateListener;
import net.grinder.console.communication.ConnectionAgentListener;
import net.grinder.engine.controller.AgentControllerIdentityImplementation;
import net.grinder.message.console.AgentControllerState;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.mutable.MutableInt;
import org.ngrinder.agent.model.AgentRequest;
import org.ngrinder.agent.model.Connection;
import org.ngrinder.agent.repository.AgentManagerRepository;
import org.ngrinder.agent.repository.ConnectionRepository;
import org.ngrinder.agent.store.AgentInfoStore;
import org.ngrinder.common.exception.NGrinderRuntimeException;
import org.ngrinder.infra.config.Config;
import org.ngrinder.infra.hazelcast.HazelcastService;
import org.ngrinder.infra.hazelcast.task.AgentStateTask;
import org.ngrinder.infra.hazelcast.task.ConnectionAgentTask;
import org.ngrinder.infra.hazelcast.topic.listener.TopicListener;
import org.ngrinder.infra.hazelcast.topic.message.TopicEvent;
import org.ngrinder.infra.hazelcast.topic.subscriber.TopicSubscriber;
import org.ngrinder.infra.schedule.ScheduledTaskService;
import org.ngrinder.model.AgentInfo;
import org.ngrinder.model.PerfTest;
import org.ngrinder.model.User;
import org.ngrinder.monitor.controller.model.SystemDataModel;
import org.ngrinder.perftest.service.AgentManager;
import org.ngrinder.region.model.RegionInfo;
import org.ngrinder.region.service.RegionService;
import org.ngrinder.service.AbstractAgentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.PostConstruct;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;

import static java.util.Collections.emptySet;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toSet;
import static java.util.stream.Stream.concat;
import static org.apache.commons.lang.StringUtils.*;
import static org.ngrinder.agent.model.AgentRequest.RequestType.STOP_AGENT;
import static org.ngrinder.agent.model.AgentRequest.RequestType.UPDATE_AGENT;
import static org.ngrinder.common.constant.CacheConstants.*;
import static org.ngrinder.common.constant.ControllerConstants.PROP_CONTROLLER_ENABLE_AGENT_AUTO_APPROVAL;
import static org.ngrinder.common.util.CollectionUtils.newHashMap;
import static org.ngrinder.common.util.LoggingUtils.format;
import static org.ngrinder.common.util.TypeConvertUtils.cast;

/**
 * Agent manager service.
 *
 * @since 3.0
 */
@Profile("production")
@Service
@RequiredArgsConstructor
public class AgentService extends AbstractAgentService
	implements TopicListener<AgentRequest>, AgentStatusUpdateListener, ConnectionAgentListener {
	protected static final Logger LOGGER = LoggerFactory.getLogger(AgentService.class);

	protected final AgentManager agentManager;

	protected final AgentManagerRepository agentManagerRepository;

	@Getter
	private final Config config;

	private final RegionService regionService;

	private final HazelcastService hazelcastService;

	private final TopicSubscriber topicSubscriber;

	protected final AgentInfoStore agentInfoStore;

	protected final ScheduledTaskService scheduledTaskService;

	private final ConnectionRepository connectionRepository;

	@Value("${ngrinder.version}")
	private String nGrinderVersion;

	@PostConstruct
	public void init() {
		agentManager.addAgentStatusUpdateListener(this);
		agentManager.addConnectionAgentListener(this);
		topicSubscriber.addListener(AGENT_TOPIC_LISTENER_NAME, this);
		Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(this::connectionAgentHealthCheck, 1L, 1L, TimeUnit.MINUTES);
	}

	private void connectionAgentHealthCheck() {
		connectionRepository.findAll()
			.stream()
			.filter(connection -> config.getRegion().equals(connection.getRegion()))
			.filter(connection -> agentInfoStore.getAgentInfo(createAgentKey(connection.getIp(), connection.getName())) == null)
			.forEach(connection -> {
				try {
					agentManager.addConnectionAgent(connection.getIp(), connection.getPort());
					LOGGER.info("Reconnected to connection agent {}:{}", connection.getIp(), connection.getPort());
				} catch (Exception e) {
					LOGGER.debug("Fail to reconnect to connection agent {}:{}", connection.getIp(), connection.getPort());
				}
			});
	}

	private void fillUpAgentInfo(AgentInfo agentInfo, AgentProcessControlImplementation.AgentStatus agentStatus) {
		if (agentInfo == null || agentStatus == null) {
			return;
		}

		AgentControllerIdentityImplementation agentIdentity = (AgentControllerIdentityImplementation) agentStatus.getAgentIdentity();
		AgentControllerState state = agentStatus.getAgentControllerState();

		agentInfo.setState(state);
		agentInfo.setIp(requireNonNull(agentIdentity).getIp());
		agentInfo.setRegion(config.getRegion());
		agentInfo.setAgentIdentity(agentIdentity);
		agentInfo.setName(agentIdentity.getName());
		agentInfo.setVersion(agentManager.getAgentVersion(agentIdentity));
		agentInfo.setPort(agentManager.getAttachedAgentConnectingPort(agentIdentity));

		if (!isValidSubregion(agentInfo.getSubregion())) {
			agentInfo.setSubregion("");
		}
	}

	private boolean isValidSubregion(String subregion) {
		String controllerRegion = config.getRegion();
		RegionInfo currentControllerRegion = regionService.getOne(controllerRegion);
		return currentControllerRegion.getSubregion().contains(subregion);
	}

	private List<AgentInfo> getAllReady() {
		return agentInfoStore.getAllAgentInfo()
			.stream()
			.filter(agentInfo -> agentInfo.getState() != null && agentInfo.getState().isReady())
			.collect(toList());
	}

	public List<AgentInfo> getAllActive() {
		return agentInfoStore.getAllAgentInfo()
			.stream()
			.filter(agentInfo -> agentInfo.getState() != null && agentInfo.getState().isActive())
			.collect(toList());
	}

	/**
	 * Get the available agent count map in all regions of the user, including
	 * the free agents and user specified agents.
	 *
	 * @param userId current user id
	 * @return user available agent count map
	 */
	@Override
	public Map<String, MutableInt> getAvailableAgentCountMap(String userId) {
		Map<String, RegionInfo> regions = regionService.getAll();
		Map<String, MutableInt> availShareAgents = newHashMap();
		Map<String, MutableInt> availUserOwnAgent = newHashMap();

		regions.forEach((region, regionInfo) -> {
			regionInfo.getSubregion().forEach(subregion -> {
				availShareAgents.put(region + "." + subregion, new MutableInt(0));
				availUserOwnAgent.put(region + "." + subregion, new MutableInt(0));
			});
			availShareAgents.put(region, new MutableInt(0));
			availUserOwnAgent.put(region, new MutableInt(0));
		});

		for (AgentInfo agentInfo : getAllActive()) {
			// Skip all agents which are disapproved, inactive or
			// have no region prefix.
			if (!agentInfo.isApproved()) {
				continue;
			}

			String agentRegion = agentInfo.getRegion();
			String agentSubregion = agentInfo.getSubregion();

			if (isBlank(agentRegion) || !regions.containsKey(agentRegion)) {
				continue;
			}

			// It's my own agent
			String agentFullRegion = isEmpty(agentSubregion) ? agentRegion : agentRegion + "." + agentSubregion;
			if (isDedicatedAgent(agentInfo, userId)) {
				incrementAgentCount(availUserOwnAgent, agentFullRegion);
			} else if (isCommonAgent(agentInfo)) {
				incrementAgentCount(availShareAgents, agentFullRegion);
			}
		}

		int maxAgentSizePerConsole = agentManager.getMaxAgentSizePerConsole();

		regions.forEach((region, regionInfo) -> {
			regionInfo.getSubregion().forEach(subregion -> {
				String agentFullRegion = region + "." + subregion;
				MutableInt mutableInt = availShareAgents.get(agentFullRegion);
				int shareAgentCount = mutableInt.intValue();
				mutableInt.setValue(Math.min(shareAgentCount, maxAgentSizePerConsole));
				mutableInt.add(availUserOwnAgent.get(agentFullRegion));
			});
			MutableInt mutableInt = availShareAgents.get(region);
			int shareAgentCount = mutableInt.intValue();
			mutableInt.setValue(Math.min(shareAgentCount, maxAgentSizePerConsole));
			mutableInt.add(availUserOwnAgent.get(region));
		});

		return availShareAgents;
	}

	private void incrementAgentCount(Map<String, MutableInt> agentMap, String region) {
		if (agentMap.containsKey(region)) {
			agentMap.get(region).increment();
		}
	}

	@Override
	public AgentControllerIdentityImplementation getAgentIdentityByIpAndName(String ip, String name) {
		AgentInfo agentInfo = getAgent(ip, name);
		if (agentInfo != null) {
			return cast(agentInfo.getAgentIdentity());
		}
		return null;
	}

	public AgentInfo getAgent(String ip, String name) {
		return agentInfoStore.getAgentInfo(createAgentKey(ip, name));
	}

	/**
	 * Approve/disapprove the agent on given id.
	 *
	 * @param ip      ip
	 * @param name	  host name
	 * @param approve true/false
	 */
	@Transactional
	public void approve(String ip, String name, boolean approve) {
		AgentInfo agentInfoInDB = agentManagerRepository.findByIpAndName(ip, name);

		if (agentInfoInDB != null) {
			agentInfoInDB.setApproved(approve);
		} else {
			agentInfoInDB = new AgentInfo();
			agentInfoInDB.setIp(ip);
			agentInfoInDB.setName(name);
			agentInfoInDB.setApproved(approve);
			agentManagerRepository.save(agentInfoInDB);
		}
		agentManagerRepository.flush();

		updateApproveInStore(ip, name, approve);
	}

	private void updateApproveInStore(String ip, String name, boolean approve) {
		AgentInfo agentInfo = getAgent(ip, name);
		agentInfo.setApproved(approve);
		agentInfoStore.updateAgentInfo(agentInfo.getAgentKey(), agentInfo);
	}

	/**
	 * Get all free approved agents
	 *
	 * @return AgentInfo set
	 */
	private Set<AgentInfo> getAllFreeApprovedAgents() {
		return getAllReady()
			.stream()
			.filter(AgentInfo::isApproved)
			.collect(toSet());
	}

	/**
	 * Get all free approved agents attached to current node.
	 *
	 * @return AgentInfo set
	 *
	 */
	public Set<AgentInfo> getAllAttachedFreeApprovedAgents() {
		return getAllFreeApprovedAgents()
			.stream()
			.filter(this::isCurrentRegion)
			.collect(toSet());
	}

	/**
	 * Get all approved agents for given user which are not used now.
	 *
	 * @param  userId user id
	 * @return AgentInfo set
	 */
	public Set<AgentInfo> getAllAttachedFreeApprovedAgentsForUser(String userId, String fullRegion) {
		return getAllFreeApprovedAgents()
			.stream()
			.filter(this::isCurrentRegion)
			.filter(agentInfo -> StringUtils.equals(agentInfo.getSubregion(), extractSubregionFromFullRegion(fullRegion)))
			.filter(agentInfo -> isDedicatedAgent(agentInfo, userId) || isCommonAgent(agentInfo))
			.collect(toSet());
	}

	private boolean isCurrentRegion(AgentInfo agentInfo) {
		String region = config.getRegion();
		return StringUtils.equals(region, agentInfo.getRegion());
	}

	private boolean isDedicatedAgent(AgentInfo agentInfo, String userId) {
		if (isCommonAgent(agentInfo)) {
			return false;
		}
		return StringUtils.equals(agentInfo.getOwner(), userId);
	}

	private String extractSubregionFromFullRegion(String fullRegion) {
		if (isEmpty(fullRegion)) {
			return "";
		}

		String[] regionToken = fullRegion.split("\\.");
		return regionToken.length > 1 ? regionToken[1] : "";
	}

	private boolean isCommonAgent(AgentInfo agentInfo) {
		return StringUtils.isEmpty(agentInfo.getOwner());
	}

	/**
	 * Assign the agents on the given console.
	 *
	 * @param perfTest          current performance test.
	 * @param singleConsole     {@link SingleConsole} to which agents will be assigned.
	 * @param grinderProperties {@link GrinderProperties} to be distributed.
	 * @param agentCount        the count of agents.
	 */
	public synchronized void runAgent(PerfTest perfTest, final SingleConsole singleConsole,
									  final GrinderProperties grinderProperties, final Integer agentCount) {
		User user = perfTest.getCreatedBy();
		final Set<AgentInfo> allFreeAgents = getAllAttachedFreeApprovedAgentsForUser(user.getUserId(), perfTest.getRegion());
		final Set<AgentInfo> necessaryAgents = selectAgent(user, allFreeAgents, agentCount);

		if (hasOldVersionAgent(necessaryAgents)) {
			for (AgentInfo agentInfo : necessaryAgents) {
				if (!agentInfo.getVersion().equals(nGrinderVersion)) {
					update(agentInfo.getIp(), agentInfo.getName());
				}
			}
			throw new NGrinderRuntimeException("Old version agent is detected so, update message has been sent automatically." +
				"\nPlease restart perftest after few minutes.");
		}

		hazelcastService.put(DIST_MAP_NAME_RECENTLY_USED_AGENTS, user.getUserId(), necessaryAgents);

		LOGGER.info(format(perfTest, "{} agents are starting.", agentCount));
		for (AgentInfo agentInfo : necessaryAgents) {
			LOGGER.info(format(perfTest, "- Agent {}", agentInfo.getName()));
		}
		agentManager.runAgent(singleConsole, grinderProperties, necessaryAgents);
	}

	private boolean hasOldVersionAgent(Set<AgentInfo> agentInfos) {
		return agentInfos.stream().anyMatch(agentInfo -> !agentInfo.getVersion().equals(nGrinderVersion));
	}

	/**
	 * Select agent. This method return agent set which is belong to the given user first and then share agent set.
	 *
	 * Priority of agent selection.
	 * 1. dedicated agent of recently used.
	 * 2. dedicated agent.
	 * 3. public agent of recently used.
	 * 4. public agent.
	 *
	 * @param user          user
	 * @param allFreeAgents available agents
	 * @param agentCount    number of agents
	 * @return selected agents.
	 */
	Set<AgentInfo> selectAgent(User user, Set<AgentInfo> allFreeAgents, int agentCount) {
		Set<AgentInfo> recentlyUsedAgents = hazelcastService.getOrDefault(DIST_MAP_NAME_RECENTLY_USED_AGENTS, user.getUserId(), emptySet());

		Comparator<AgentInfo> recentlyUsedPriorityComparator = (agent1, agent2) -> {
			if (recentlyUsedAgents.contains(agent1)) {
				return -1;
			}
			if (recentlyUsedAgents.contains(agent2)) {
				return 1;
			}
			return 0;
		};

		Stream<AgentInfo> freeDedicatedAgentStream = allFreeAgents
			.stream()
			.filter(agentInfo -> isDedicatedAgent(agentInfo, user.getUserId()))
			.sorted(recentlyUsedPriorityComparator);

		Stream<AgentInfo> freeAgentStream = allFreeAgents
			.stream()
			.filter(this::isCommonAgent)
			.sorted(recentlyUsedPriorityComparator);

		return concat(freeDedicatedAgentStream, freeAgentStream)
			.limit(agentCount)
			.collect(toSet());
	}

	/**
	 * Stop agent. If it's in cluster mode, it queue to agentRequestCache.
	 * otherwise, it send stop message to the agent.
	 *
	 * @param ip ip of agent to stop.
	 * @param name host name of agent to stop.
	 */
	@Override
	public void stop(String ip, String name) {
		AgentInfo agentInfo = getAgent(ip, name);
		if (agentInfo == null) {
			return;
		}
		publishTopic(agentInfo, STOP_AGENT);
	}

	public void stop(AgentControllerIdentityImplementation agentIdentity) {
		agentManager.stopAgent(agentIdentity);
	}

	@Override
	public void update(String ip, String name) {
		AgentInfo agentInfo = getAgent(ip, name);
		if (agentInfo == null) {
			return;
		}
		publishTopic(agentInfo, UPDATE_AGENT);
	}

	@Override
	public SystemDataModel getSystemDataModel(String ip, String name, String region) {
		return hazelcastService.submitToRegion(AGENT_EXECUTOR_SERVICE_NAME, new AgentStateTask(ip, name), region);
	}

	/**
	 * Update the agent
	 *
	 * @param agentIdentity agent identity to be updated.
	 */
	public void updateAgent(AgentIdentity agentIdentity) {
		agentManager.updateAgent(agentIdentity, agentManager.getAgentForceUpdate() ? "99.99" : config.getVersion());
	}

	public void addConnectionAgent(String ip, int port, String region) {
		hazelcastService.submitToRegion(AGENT_EXECUTOR_SERVICE_NAME, new ConnectionAgentTask(ip, port), region);
	}

	private String createAgentKey(String ip, String name) {
		return ip + "_" + name;
	}

	/**
	 * Ready agent status count return
	 *
	 * @param userId       the login user id
	 * @param targetRegion the name of target region
	 *
	 * @return ready status agent count
	 */
	@Override
	public int getReadyAgentCount(String userId, String targetRegion) {
		return getReadyAgentInfos(userId, targetRegion, false).size();
	}

	/**
	 * Ready agent status count return
	 *
	 * @param userId          the login user id
	 * @param targetRegion    the name of target region
	 * @param targetSubregion the name of target subregion
	 *
	 * @return ready status agent count
	 */
	@Override
	public int getReadyAgentCount(String userId, String targetRegion, String targetSubregion) {
		return getReadyAgentInfos(userId, targetRegion, targetSubregion).size();
	}

	/**
	 * ${@link List} of ready status agents information return
	 *
	 * @param userId                   the login user id
	 * @param targetRegion             the name of target region
	 * @param isContainSubregionAgents the flag of if contains subregion agents or not
	 *
	 * @return ${@link List} of ready status agents information
	 */
	private List<AgentInfo> getReadyAgentInfos(String userId, String targetRegion, boolean isContainSubregionAgents) {
		return getAllFreeApprovedAgents()
			.stream()
			.filter(agentInfo -> StringUtils.equals(targetRegion, agentInfo.getRegion()))
			.filter(agentInfo -> isEmpty(agentInfo.getSubregion()) || isContainSubregionAgents)
			.filter(agentInfo -> {
				String agentOwner = agentInfo.getOwner();
				return isEmpty(agentOwner) || StringUtils.equals(userId, agentOwner);
			})
			.collect(toList());
	}

	/**
	 * ${@link List} of ready status agents information return
	 *
	 * @param userId          the login user id
	 * @param targetRegion    the name of target region
	 * @param targetSubregion the name of target subregion
	 *
	 * @return ${@link List} of ready status agents information
	 */
	private List<AgentInfo> getReadyAgentInfos(String userId, String targetRegion, String targetSubregion) {
		if (isEmpty(targetSubregion)) {
			return getReadyAgentInfos(userId, targetRegion, false);
		}

		return getReadyAgentInfos(userId, targetRegion, true)
			.stream()
			.filter(agentInfo -> StringUtils.equals(agentInfo.getSubregion(), targetSubregion))
			.collect(toList());
	}

	@Override
	public List<AgentInfo> getAllAttached() {
		return agentInfoStore.getAllAgentInfo();
	}

	@Override
	public List<AgentInfo> getLocalAgents() {
		String region = config.getRegion();
		return agentInfoStore.getAllAgentInfo()
			.stream()
			.filter(agentInfo -> region.equals(agentInfo.getRegion()))
			.collect(toList());
	}

	@Override
	public String createKey(AgentControllerIdentityImplementation agentIdentity) {
		return createAgentKey(agentIdentity.getIp(), agentIdentity.getName());
	}

	private void publishTopic(AgentInfo agentInfo, AgentRequest.RequestType requestType) {
		hazelcastService.publish(AGENT_TOPIC_NAME, new TopicEvent<>(AGENT_TOPIC_LISTENER_NAME,
			agentInfo.getRegion(), new AgentRequest(agentInfo.getIp(), agentInfo.getName(), requestType)));
	}

	@Override
	public void execute(TopicEvent<AgentRequest> event) {
		if (event.getKey().equals(config.getRegion())) {
			AgentRequest agentRequest = event.getData();
			AgentControllerIdentityImplementation agentIdentity = getAgentIdentityByIpAndName(agentRequest.getAgentIp(), agentRequest.getAgentName());
			if (agentIdentity != null) {
				agentRequest.getRequestType().process(AgentService.this, agentIdentity);
			}
		}
	}

	@Override
	public void update(Map<AgentIdentity, AgentProcessControlImplementation.AgentStatus> agentMap) {
		boolean approved = config.getControllerProperties().getPropertyBoolean(PROP_CONTROLLER_ENABLE_AGENT_AUTO_APPROVAL);
		Set<AgentInfo> agentInfoSet = agentInfoStore.getAllAgentInfo()
			.stream()
			.filter(agentInfo -> StringUtils.equals(agentInfo.getRegion(), config.getRegion()))
			.collect(toSet());

		for (AgentProcessControlImplementation.AgentStatus agentStatus : agentMap.values()) {
			AgentControllerIdentityImplementation agentIdentity = (AgentControllerIdentityImplementation) agentStatus.getAgentIdentity();
			AgentInfo agentInfo = agentInfoStore.getAgentInfo(createKey(requireNonNull(agentIdentity)));
			// check new agent
			if (agentInfo == null) {
				agentInfo = new AgentInfo();
			}

			fillUpAgentInfo(agentInfo, agentStatus);

			AgentInfo agentInfoInDB = agentManagerRepository.findByIpAndName(agentInfo.getIp(), agentInfo.getName());
			if (agentInfoInDB != null) {
				agentInfo.setApproved(agentInfoInDB.getApproved());
			} else {
				agentInfo.setApproved(approved);
			}

			agentInfoStore.updateAgentInfo(agentInfo.getAgentKey(), agentInfo);
			agentInfoSet.remove(agentInfo);
		}

		// delete disconnected agent.
		for (AgentInfo agentInfo : agentInfoSet) {
			agentInfoStore.deleteAgentInfo(agentInfo.getAgentKey());
		}
	}

	@Override
	public void onConnectionAgentMessage(String ip, String name, String subregion, int port) {
		Connection connection = connectionRepository.findByIpAndPort(ip, port);
		String connectedAgentRegion = getConnectedAgentRegion(subregion);
		if (connection == null) {
			connection = new Connection(ip, name, port, connectedAgentRegion);
		} else {
			connection.setName(name);
			connection.setRegion(connectedAgentRegion);
		}
		connectionRepository.save(connection);
	}

	private String getConnectedAgentRegion(String subregion) {
		String region = regionService.getCurrent();
		RegionInfo regionInfo = regionService.getOne(region);
		if (config.isClustered() && isValidSubregion(regionInfo, subregion)) {
			region = region + "." + subregion;
		}
		return region;
	}

	private boolean isValidSubregion(RegionInfo regionInfo, String subregion) {
		return regionInfo.getSubregion().contains(subregion);
	}
}

redpajama_set_name: RedPajamaGithub


text:
Анто́нио Режиналдо́ Пиццо́ния-мла́дший (, родился 11 сентября 1980 года в Манаусе) — бразильский автогонщик, пилот Формулы-1. Известен как «Jungle Boy» (). В данный момент живёт в Манаусе.

Биография

До Формулы-1
С 1991 по 1997 год он принимал участие в различных картинговых сериях. В 1997 Антонио отправился в Великобританию и выступил в Формуле-Воксхолл Юниор, где занял второе место и выиграл Зимний фестиваль. В 1998 в дополнении к очередному титулу в Формуле-Воксхолл Юниор он выиграл Формула-Рено Зимний фестиваль. 1999 год стал самым успешным, бразилец выиграл чемпионат Британской Формулы-Рено и занял второе место в европейской серии. В 2000 году одержал пять побед и стал чемпионом Британской Формулы-3.

В 2001 Пиццония перешёл в Формулу-3000, выиграл одну гонку и завершил чемпионат на шестой позиции в личном зачёте.

Формула-1
В  стал тест-пилотом команды Формулы-1 Williams, но продолжил выступление в Формуле-3000 и занял там восьмое место. После впечатляющих результатов на тестах, команда Jaguar Racing заключила с ним контракт. В 2003 году Пиццония впервые стал боевым пилотом Формулы-1. Однако из-за череды плохих результатов после первой половины сезона был заменён на Джастина Уилсона, перешедшего в Jaguar из Minardi.

Во время демонстрационного заезда в Хересе на машине Jaguar S-Type R Антонио Пиццония вместе с его пассажиром Стивом Сатклиффом, журналистом Autocar, попали в аварию. Пилот потерял управление в первом повороте, машину развернуло и она врезалась в барьер из отработанных покрышек. Очевидно, что он случайно затормозил в точке торможения болидов Формулы-1 и ушёл с траектории. Видео аварии также доступно на Youtube.

В  году он вернулся в Williams в качестве тест-пилота. Перед Гран-при Германии было объявлено, что Пиццония займёт место Марка Жене, который в свою очередь заменял травмированного Ральфа Шумахера. На Гран-при Германии он финишировал седьмым и набрал первые два очка в карьере, свой результат он повторил на Гран-при Венгрии. В Бельгии он впервые в карьере лидировал, но не смог финишировать из-за механических проблем. Он заработал ещё два очка в Италии (показав во время гонки рекорд скорости в Формуле-1 на тот момент — 369.9 км/ч). После этого в гонки вернулся Ральф Шумахер.

В 2005 году пилотами Williams стали Марк Уэббер и Ник Хайдфельд. Пиццония остался тест-пилотом Williams и заменил Хайдфельда в Монце, когда немец почувствовал сильные головные боли на пятничной практике. Не принимая участия в Формуле-1 с Гран-при Италии 2004 года, бразилец квалифицировался 16-м. В гонке он, обогнав бо́льшую часть соперников, повторил свой лучший результат — седьмое место, заработав два очка. Затем Антонио участвовал в Гран-при Бельгии, где он получил штраф за столкновение с шедшим вторым Хуаном-Пабло Монтойей за несколько кругов до финиша. Пиццония также принял участие в Гран-при Бразилии, но его гонка была завершена ещё до первого поворота, после столкновения с напарником Марком Уэббером, которое привело к аварии с Дэвидом Култхардом.

Пиццония завершил сезон с Williams. Он сошёл на Гран-при Японии в начале гонки после разворота, а также финишировал тринадцатым на заключительном этапе в Китае. В сезоне  года его заменил чемпион GP2 Нико Росберг, на этом карьера в Формуле-1 для Пиццонии была закончена.

После Формулы-1
В 2006 году участвовал в чемпионате Champ Car за команду Пола Джентилоцци Rocketsports на Гран-при Лонг-Бич, Монреаля и двух последних этапах.

В 2007 он участвовал в серии GP2 за команду Petrol Ofisi FMS International. В мае после этапа в Монако, где Пиццония заработал единственное очко, его заменил Адам Кэрролл. После этого он вернулся в Бразилию для участия с июля в Stock Car Brasil. Он остался в серии в следующем году и при этом участвовал в новой футбольно-автогоночной серии Суперлига Формула, после пропуска первого этапа.

В 2014 и 2015 годах выступал в серии Auto GP за австрийскую команду Zele Racing.

Результаты выступлений

Результаты выступлений в Формуле-3000

Результаты выступлений в Формуле-1

Результаты выступлений в серии GP2

Результаты выступлений в серии Суперлига Формула

 Примечание: В Донингтонпарке футбольный клуб SC Corinthians представлял Энди Соучек.Поскольку в SF существует только зачёт футбольных клубов, итоговая позиция и количество очков (9 место, 264 очка) указаны с учётом выступлений всех гонщиков клуба.

Примечания

Ссылки
 Результаты выступлений

Родившиеся в Манаусе
Картингисты
Автогонщики Бразилии
Пилоты Формулы-1 из Бразилии
Пилоты Формулы-1 2000-х годов
Пилоты Формулы-1, выступавшие на Jaguar
Пилоты Формулы-1, выступавшие на Williams
Пилоты Формулы-1, набиравшие очки
Пилоты GP2 из Бразилии
Гонщики Superleague Formula
Пилоты FIA WEC

redpajama_set_name: RedPajamaWikipedia


Hello all! I'm so excited to share more about how I made the new headboard in our bedroom. I shared more about the start to this room redo, the new bed and the headboard earlier this week.
I've made my own headboards (and for friends!) for years – even before blogging. It's seriously one of the easiest DIY projects you can do and you will save SO MUCH money doing it on your own.
The headboard part I was used to – but I was totally intimidated by the tufting part. I've never tufted one because it seemed like it would be hard…but it is not a big deal! For real, it wasn't bad at all.
I wish I would have taken pics of how I cut the corners out, but it was so quick. Dad and I just searched the garage for something round (and used my bird food holder). I held it up on the corner and figured out how big of a cut out I wanted, then did some quick measurements to make sure it was even on both sides. Then I traced the bottom of the can and cut one side out with the jigsaw. That first piece is all you need to make the second one – just flip it over and place it on the other corner, trace, and you've got a mirror image.
I hope that makes sense – it was so fast I didn't even think to take pics.
Dad helped me take the board upstairs where I went to work! I showed you how I made the headboard in the Bub's room and this was nearly identical till I got to the tufting part.
Why this instead of regular foam? One word – cheaper. ;) Foam is a petroleum based product, so it goes up with the price of gas. Which means it's just going up and up over time. I haven't even check the price lately but for three inches of foam for a nearly 80 inch headboard wouldn't be cheap. The size was another reason – I would have had to use numerous pieces of foam to cover this and when you use the mattress pad you can get one big piece.
I had one I had picked up on clearance years ago (look for the XL twin sizes after back to school – you can find them for cheap!) but it was too small for this headboard. So I ended up with a bigger size (queen I think?), then ended up going back to get another one to do two layers because I really wanted it super soft.
One of the things I grew to dislike about our old headboard was how hard it was. I mean, it was wood, so yeah. And it had a curve to it so our heads never fit against it. First world problems. This time I made the headboard tall and cushy that we could comfortably lean against it.
Then I used a piece of muslin I had in my stash too, to cover everything again. This just secures all the foam and gives you a nice base for the final fabric.
I wasn't sure exactly what color I wanted so I grabbed a few. ;) The two on the left were $17 for a panel – which compared to a couple yards of upholstery fabric is pretty good.
Problem was we weren't crazy about any of them when we tried them out. One was too light, one was too blah and one was too dark.
Soooo…the next day I went to the darn fabric store. ;) I needed the stuff to tuft the headboard anyway (at first I wasn't planning on tufting. Scared, remember?) so I took a quick look through the fabrics and found one I LOVED in the suit fabric aisle.
I just wanted it to be a simple design and some of the tufting I see is just too much for me. So when I did my math I decided to just do three across the top and four under that. That's it – anything lower would always be covered by pillows or the mattress so I didn't even worry about the bottom.
Remember…no one will see this part. Seriously, the back doesn't matter. Do what you gotta do!
Getting there! The suit fabric is like a gray linen and looked so good. Way better than the drapes I picked out – I returned those.
It made this SO easy. More on that in a minute.
I just used scrap fabric to make them all. Making buttons is fun.
Then I pushed the needle through the headboard, threaded the button on, and pushed it back through to the back. This is where the waxed thread comes in super handy – it kind of held the button where it was while I secured it to the back. Regular thread would slip and be hard to keep where you want it. This worked GREAT.
I didn't pull each button super tight – I didn't want it to be a deep tuft. Just a little bit of tuft. And there is an easier way to do this by the way – you can just thread both ends of the thread on the needle with the button already on it, then put it through from front to back and then secure. But that method didn't work for me because the waxed thread was so thick.
The particle board I used to make the headboard was 1/2 an inch thick and I went that size on purpose – so these would have something to grab onto. Any thinner and it would have been hard to get them in well.
I figured out where the studs were and screwed into those in first, then that determined where I put the hangers on the back of the headboard.
You can see the nailhead trim better in that pic. From the front you don't see it as much, but it's a great little detail when you get up closer. I love it!
You can see there why I didn't add any buttons any lower too – they'd just be covered.
It's by Hillcrest and it was a duvet cover and shams for $40. I had been looking for new bedding for months and just happened to find this, new sheets (they aren't on now – they are darker and I'll put them back on later in the fall) and the small pillow on the bed all in one trip. None of them are supposed to go together but I think they work well!
So far with what I made on the old bed, I've still got about $300+ to spend – I think I may make money on this redo! That's what I'm talking about.
Total was $93! Aww yeah. And I have wood, foam, nailheads, buttons and thread left over to use on future projects.
If you went with one layer of foam/egg crate that will go down about $20. I had the batting and muslin but only one of those is really needed and they are both cheap. Of course of you skip the tufting that will help too!
Overall I'm so happy with how it turned out. And it is SO much more comfortable than our old headboard. Have you ever made your own? Did you find it easy to do? Have you ever attempted the tufting? Are ya sceered?


Packers and Movers Pune .We provide services all over India and local services. We are into this business from the past 8 years. You can be rest assured if you give us the work of relocating as we do it without any kind of tension for you. Moving is always stressful; and the further you move, the greater the stress.


Han® HC Individual is the new HARTING product family for universal contact arrangement options. Individually sealed 350 A contacts (protection class IP 66) can be arranged in adjacent configurations of up to 10 connections on one supporting rail. This interface can be very easily separated thanks to a stainless steel lever system with integrated contact guide. Each individual connection can be assembled separately, and engaged and exchanged individually.


Call 318-665-4423 for an appointment!
For a friendly, personable dentist who has over 30 years of experience in the field, choose Jan T. Bagwell, DDS. Dr. Bagwell recently welcomed her daughter, Dr. Jessica J. Johnston, into her practice. Located in Monroe, LA, our office offers patients from the surrounding areas complete general and cosmetic dental treatments. We want you to have the confidence to always put your best smile forward! Our team is dedicated to using the newest technologies and techniques, as well as state-of-the-art equipment, to enhance your smile and make it as healthy and beautiful as possible.
Come to us for cosmetic dental treatments such as teeth whitening, DURAthin veneers, porcelain crowns, and implant restorations in order to improve the appearance of your teeth and make them whiter and more even. We also offer regular hygiene checkups as well as general dentistry services like partials, dentures, extractions and root canals.
We always work with compassion to make our patients feel as relaxed as possible and provide the best possible dental care! Our team is proud to use The DentalVibe, a unique tool that takes the fear and anxiety out of having dental treatment. It is used as a distraction technique for pain-free injections.
We are an inviting, easygoing practice filled with expert dental professionals that welcome both long-term and new patients.
Contact us at 318-665-4423 if you have any questions or to schedule an appointment! We look forward to helping you enhance your smile.
You don't have to brush your teeth, just the ones you want to keep!
Monday – Thursday | 8 a.m. – 5 p.m.
Friday | 8 a.m. – 12 p.m.


Remember when you could shut out all the air pollution and other crap just by going inside of your house and closing the door? When you're in your own house, you get to control the quality of the air you breathe. Or does one really? Sadly, you will discover all sorts of things that can enter your house and raise the likelihood of your coming down with asthma or respiratory issues. This is to a certain extent because our houses are actually more air tight–our windows and walls are sealed in order to keep the heating and cooling costs low. Sadly, those power personal savings are raising the pollution in the air of our home. Keep reading to find out what you can do to make it easier for you to breathe in your home.
If you are able, leave your shoes outside the house. If you cannot do that, leave them inside the front entry way of your place. When you walk around, your shoes come into contact and acquire things, even in places like hospitals and malls. The soles of your shoes get coated in mildew, chemicals, bacteria, filth and dust. When you bring these kinds of elements into your house, it gets into your floor coverings and rugs. Then people kick it up once again if you walk back over it. This is the reason why, as opposed to staying in the floor, it will get kicked back up into the air and you wind up breathing it in. If you take off your shoes and boots outside or within the entry way of your home, you reduce this risk by leaps and bounds.
Do not get your dry cleaning instantly. Let the cleaner hold it for a day or two. Garments that has just recently been dry cleaned is soaked with chemicals that are incredibly harmful. Some of them have been associated with cancer and also neurological damage. You want to make sure that your garments are entirely dry before you bring them home. If the gear hasn't yet dried completely, you run the risk of both inhaling those chemicals and transmitting them onto your skin. You may also try to find a dry cleaner that uses non harmful and environmentally cleaning methods.
Keep the house ventilated! Yes, it's true that you put in those double paned windows since you wanted to keep the household at your ideal temperature. All the same, keeping the windows sealed 24/7 means that you keep breathing in all of the things that you kick up during the day. Think about the dust mites that get stirred up when you vacuum and dust. The smoke and fumes that permeate your house when you cook on the stove or with your oven don't ever dissipate. The heavy steam from your shower can seep into your walls which causes mold to form which often can then get breathed in and do serious damage to your health. Your fans must get started. Keep your windows open. Give the kicked up things the opportunity to desolve.
There are a wide range of methods to make the house better. Remember, coming home doesn't imply you have shut out the issues of the universe in a physical sense. Take steps to make certain your place really is pollution free.


March 26, 2019- ongoing: Nine prisoners at two Wisconsin prisons began a hunger strike demanding an end to indefinite solitary confinement. Their demands cited the recently elected governor's campaign promises to reform solitary confinement practices. The hunger strike was timed to start on Madison Action Day, an annual prison reform lobby day. Outside supporters also organized a call-in campaign.
March 18, 2019: Eight prisoners began a hunger strike in response to being placed in solitary confinement without due cause.


text:
Aga Khan University and Fred Hutch join in global collaboration
March 7, 2019 Web Desk 0
Karachi, March 07, 2019 (PPI-OT): The Aga Khan University and Fred Hutchinson Cancer Research Center today expressed their shared commitment in working together to improve the prevention, diagnosis and treatment of cancer and related diseases in low-and-middle-income countries.
President Firoz Rasul of Aga Khan University and President and Director of Fred Hutch, Dr Gary Gilliland, signed a memorandum of understanding which aims to foster joint international scientific research projects, training programs in clinical care, laboratory and clinical research programs and infrastructure development in low-and middle-income settings, primarily in East Africa.
Prince Rahim and Princess Salwa Aga Khan, Dr Carl Amrhein, Provost and Vice President, Academic, for Aga Khan University and leaders from both organisations joined President Rasul and Dr Gilliland for a signing ceremony at Fred Hutch's Seattle campus. The group also visited the labs of Dr Edus Warren, head of Global Oncology at Fred Hutch, and Dr Stan Riddell, scientific director of Fred Hutch's Immunotherapy Integrated Research Center.
"Cancer is a global problem that requires global cooperation to deliver new diagnostics and treatments that will save lives around the world," President Rasul said. "We are proud to be partnering with Fred Hutch, a world leader in cancer research and care, to tackle one of the biggest challenges in global health today."
"I believe we can reach curative approaches to most, if not all, cancers by 2025, and it's through this type of collaboration that we'll get there," said Dr Gilliland. "Together, Aga Khan University and Fred Hutch have the potential to improve quality of life for cancer patients on a global scale, through enhanced treatment, training and scientific research programs. I thank Prince Rahim and Princess Salwa Aga Khan and President Firoz Rasul for joining us at Fred Hutch today to celebrate and share our ideas for this exciting collaboration."
The two organisations are committed to pursuing oncology research that is directly relevant to patients in low- and middle-income countries. Aga Khan University and Fred Hutch engage in programs to improve the next generation of cancer care through haematology and oncology training fellowships and have identified this as an area of potential collaboration.
In addition, the two organisations share the goal of increasing infrastructure development in low-and-middle-income income countries, with particular emphasis on laboratory and bio-repository capacity, to accelerate cancer research globally.
Department of Public Affairs
Stadium Road, Karachi
Fax: +92-21-34934294, +92-21-34932095
Cell: +92-301-8258028
Email: rasool.sarang@aku.edu, public.affairs@aku.edu
Website: www.aku.edu
Previous Post:High Profile Moot to discuss prevalence of Cancer in developing countries opens today
Next Post:International Women's Day: Vigil pays tributes to struggle of women, demands gender equality

redpajama_set_name: RedPajamaCommonCrawl


text:
Find An ATM
Chequing
Where do I get tax receipts?
Can I download my tax receipt online?
No, you cannot download your tax receipts online. All tax receipts including, T5s and RL-3s, were mailed on Thursday, February 27, 2020. Quebec residents will receive T5s and RL-3s in separate envelopes.
I did not receive my tax receipt. How can I obtain a copy of my tax receipt?
T5 Tax receipts have been issued to clients who have earned interest equal to or more than $50. All tax receipts have already been mailed out. If you have not received your receipt you may request a duplicate to be faxed or mailed to you. To request a duplicated copy of your tax receipt, please contact Client Services at 1-866-334-4434 Monday to Friday from 8:00 a.m. to 10:00 p.m. and weekends from 9:00 a.m. to 5:00 p.m. ET.
Didn't find what you were looking for? Visit our FAQs for more information.
We're using first- and third-party cookies to customize content and advertising, to collect anonymous web traffic data to ensure functionality of the website and remember user choices where applicable.
Access your account online anytime
ATM access
Over 3,500 ATMs across the country
Real people ready to answer your questions
Monday to Friday, 8 a.m. ET – 8 p.m. ET
Holiday hours of operation
8 a.m. ET – 8 p.m. ET
In order to answer your questions and reduce wait times, we invite you to go to our FAQ section.
Stay connected: Sign up to receive updates directly to your inbox.
Canada Deposit Insurance
Corporation Member Information
Chequing Account
Security guarantee
© 2022 Laurentian Bank of Canada.


text:
Paul R. Ingram
pingram@porterhedges.com
Paul Ingram assists clients with a broad range of corporate and transactional matters, including oil and natural gas finance transactions, public and private capital markets transactions, acquisitions and divestitures, derivatives markets, and strategic and operational planning and execution. He also advises clients on corporate governance, periodic reporting requirements, stock exchange rules, and other compliance matters.
Prior to joining Porter Hedges, Paul served in senior legal roles at both American Energy Partners and Chesapeake Energy Corporation in Oklahoma City. His responsibilities included managing legal matters for private equity-funded portfolio companies in the Anadarko Basin, Midland Basin, Utica Shale, and Marcellus Shale, as well as private equity-funded portfolio companies focused primarily on non-op and mineral strategies across the United States. He also led the execution and documentation of debt and equity offerings, acquisitions and divestitures, and advised on investor relations matters.
Acquisitions, Divestitures and Joint Ventures
Energy Finance
Energy Transactions
Corporate Governance, Compliance & Investigations
Business Planning and Entity Formation
Midstream Oil and Gas
Oilfield Services / Drilling
Oilfield Water Supply and Offtake Infrastructure
Upstream Oil and Gas
J.D., University of Oklahoma College of Law, with highest honors, 2008
B.B.A., Oklahoma Christian University, General Business, Pre-Law, 2004
Paul's representations have included the following:
Multiple private equity-backed companies in establishing and maintaining reserves-based lending facilities.
Public exploration and production company in establishing and maintaining a $4 billion reserves-based lending facility.
Public exploration and production company in multiple term loan transactions totaling more than $6 billion.
Private oilfield services company in establishing and maintaining a $900 million revolving credit facility.
Multiple private equity-backed companies in private offerings of senior notes.
Public exploration and production company in multiple senior notes offerings totaling more than $4.5 billion.
Public exploration and production company in private offerings of preferred shares in subsidiaries.
Public exploration and production company in a spin-off of oilfield services subsidiary.
Public exploration and production company in a public offering of common units in a royalty trust.
Private oilfield services company in $650 million private placement of senior notes.
Public exploration and production company in cash tender offers for $3 billion in outstanding senior notes.
Public midstream oil and gas company in multiple 144A private offerings of senior notes totaling more than $1 billion.
Private equity-backed exploration and production company in an exchange offer for senior notes.
Public exploration and production company in the sale of its investment in a private exploration and production company for $215 million.
Private equity-backed companies in multiple acquisitions and divestitures of oil and gas assets.
Public exploration and production company in investing in multiple natural gas technology companies.
Public exploration and production company in a tender offer to acquire a drilling company for more than $300 million.
Private Equity and Joint Ventures
Private equity-backed company in an equity commitment of $500 million to purchase mineral and overriding royalty interests across the United States.
Private equity-backed portfolio company in establishing multiple joint ventures with private exploration and production companies to purchase mineral and overriding royalty interests across the United States.
Public exploration and production company in partnership with a large private equity investor to purchase mineral and overriding royalty interests across the United States.
Porter Hedges Adds Paul Ingram as New Corporate and Energy Partner in Oklahoma City
Firm News, 09.05.2018


text:
Anaerobic digestion: Mid process review
by Caroline Frischmon | Jul 22, 2020 | Blog, Caroline, Remediation | 0 comments
By Caroline Frischmon
Did you know that the biggest contributor to landfills in the U.S. is wasted food? We don't eat about 40% of what's produced in the country each year, but there's a better solution than landfilling all this food. Anaerobic digestion turns the waste into fertilizer and methane, which is used to generate electricity and heat.
I've spent the last few months developing an interactive exhibit on anaerobic digestion with two other SCL members, Kara and Carlise. Originally, we expected it to debut at the Minnesota State Fair, but COVID-19 got in the way of those plans. Regardless, we are continuing to develop the exhibit knowing it will eventually make its way to public events and museums.
I remember feeling overwhelmed while writing the exhibit proposal for the fair. My major, Bioproducts Engineering, covers anaerobic digestion extensively, so while I knew the topic well, I also had to filter out a lot of extraneous information into bite-size, visual chunks. I turned in the proposal minutes before boarding a plane for Spring Break with the feeling that the bulk of the planning was now done. All that was left was working out some details with Carlise and passing it off to Kara to design the graphics.
I may have been more aware at that point of the impending pandemic than I was for how little we really had planned for the exhibit. Once we returned from spring break to a new "Work from Home" reality, I tried jumping right in with Kara and Carlise. We were quickly at a loss for how to move forward. I still had far too much information than what could fit on an exhibit board designed to hold a viewer's attention for less than a minute.
We ended up taking a step back and creating succinct learning goals at each audience level: elementary school student, high schooler, and adult. This exercise helped me realize I had designed the exhibit around predetermined activities and then tried to squeeze learning goals into those plans. Taking the step back helped us reevaluate what exactly we wanted participants to learn from the exhibit. We then designed interactive activities around those established learning goals rather than the other way around.
Now we are well on our way to completing an interactive experience focused on the most important aspects of anaerobic digestion. Hopefully, the finished product will find its way to a public event soon, pandemic willing.


The Pakistani government on Sunday ordered a tightening of security across the country, focusing on mosques and other places of worship used by members of the minority Shia Muslim community, after a powerful suicide bomb attack at a Shia prayer congregation reportedly killed 22 people and injured dozens of others.
CBS News' Farhan Bokhari reports that the attack took place around midday during a prayer gathering in Chakwal, just over two hours' driving distance from the Pakistani capital, when the attacker walked up to the front entrance and blew himself up.
"We have ordered strict security at places of worship for Shia Muslims," said a senior Pakistani government official who spoke to CBS News on condition of anonymity after the attack.
Fedayeen al-Islam, a little-known group believed linked to the Taliban, claimed responsibility through a spokesman.
Separately, a senior Pakistan Taliban commander claimed responsibility for Saturday's another suicide bomb attack in an upper class residential neighborhood of Islamabad that killed at least eight paramilitary soldiers, saying it was in retaliation for U.S. drone missile strikes against militants in Pakistan near the Afghan border.
Pakistan has a history of sectarian violence that often involves attacks by Sunni extremists on minority Shiites.
Sunday's suicide bomber set off his explosives at the entrance to a mosque in Chakwal city in Punjab province, about 50 miles south of Islamabad, during a religious congregation, said Nadim Hasan Asif, a top security official in Punjab. He said the blast killed 22 people and injured more than 30.
"The suspected man was stopped at the entrance and pushed himself in and exploded," Asif said.
Another police officer, Nasir Khan Durrani, said the attack could have been much worse. "Had he succeeded in exploding inside it could have caused a much bigger loss because there were hundreds of people inside," Durrani said.
Chaudhry Nasrullah, the top health official in Chakwal, confirmed that 22 people were killed and that more than 50 were injured, a dozen of them critically. He appealed to the government to send helicopters to evacuate the most seriously wounded.
Farid Ali, who left the mosque just before the attack occurred, said he felt the blast on his back and looked back and saw smoke and dust. "I saw several people lying dead," he told Express News TV. "There was blood everywhere."
Local television footage showed pools of blood on the road in front of the mosque. Torn clothes and a pair of shoes also littered the ground. Police investigators were shown collecting evidence, not far from a car and four motorcycles that were damaged by the blast.
A policeman with both his legs bandaged and another wounded man whose shirt was stained with blood were shown on hospital beds crying in pain. A woman standing in the emergency ward of the hospital wailed, "Oh my God. Oh my God."
Prime Minister Yousuf Raza Gilani condemned the attack, saying it was masterminded by people who are against the state and want to give Islam a bad name.
Western diplomats stationed in the capital warned that Sunday's mosque bombing could be followed by more such attacks.
In the past 30 years, members of hardliners belonging to Sunni Muslims, the majority Muslim sect in Pakistan, have periodically been blamed for attacks on upon the Shia minority.
Such violence is indicative of an increasing breakdown of security across Pakistan. But it is also linked to the internal situation in Pakistan where Sunni-majority Saudi Arabia and Shia-majority Iran (the two dominant Muslim countries in the surrounding region) have tried to gain as much support as possible within Pakistan.
Such past antagonism by the two countries has been widely seen in Pakistan as essentially a turf war.
A senior Western diplomat based in Islamabad and familiar with the history of Pakistan and the Middle East said there was an ongoing tussle between groups in Pakistan who are linked to either Iran or Saudi Arabia.
"At a time when Pakistan's internal security conditions are increasingly precarious, maybe this is when foreign powers like the Saudis or the Iranians want to exploit this situation," said the diplomat who spoke to CBS News on condition of anonymity.
Most of the militant attacks in Pakistan take place in the area near the Afghan border, where Taliban and al Qaeda militants have established bases and often strike U.S. and NATO forces in Afghanistan.
Late last month, a suicide bomber blew up in a packed mosque near the Afghan border at the climax of a Friday prayer service, killing 48 people and wounding scores more in the worst attack to hit Pakistan this year.
But militants have also stepped up attacks in Pakistan's interior.
A man identified as Umar Farooq who says he speaks for the shadowy militant organization Fedayeen al-Islam told The Associated Press via telephone Sunday that the group had staged the attack on the mosque as part of a "campaign against infidels."
He also warned the U.S. to stop its drone-fired missile strikes on militant targets in Pakistan's northwest.
Little is known of the group, but it is believed linked to the Pakistani Taliban. In the past it has claimed responsibility for other attacks, including the bombing of Islamabad's Marriott Hotel.
Pakistani Taliban chief Baitullah Mehsud has said his group was behind the attack on the police academy, which killed 12 people, including seven police. He vowed to carry out more attacks unless the U.S. stopped the missile strikes.
The drone attacks have continued.
One of Mehsud's deputies, Hakimullah Mehsud, told the AP that the Pakistani Taliban carried out the suicide attack against the paramilitary camp in Islamabad on Saturday.
He said the attack was in retaliation for U.S. drone strikes and the group would carry out two suicide attacks per week in Pakistan. He had warned last week that militants would soon strike Islamabad.
Separately Sunday, officials said the number of illegal migrants who died in Pakistan's southwestern Baluchistan province after being cooped up in a metal shipping container was lower than first reported. The toll was 48, not 62, police official Khalid Masood said.
Another 52 - most of them Afghans apparently trying to reach Iran - were hospitalized after their discovery Saturday. Ten more are missing, he said.


Join us for 12 weekends over 5 months for this empowering aligment based yoga teacher training from Hidden Dragon Yoga. Full training schedule coming soon.
Directed by Desirae Penton, owner of Hidden Dragon Yoga, the HDY Teacher Training Program incorporates skillful practitioners with time-honored techniques so that graduates may educate others effectively, safely, and purposefully in a moderately heated environment. This program is open to anyone seeking to deepen their study of yoga, and to those who wish to become yoga instructors.
Hidden Dragon Yoga serves individuals at all levels in their yoga practice, viewing the body as a sacred instrument of alignment and reunion with the Divine. Our mission is to encourage and promote each student's individual growth and self-expression using an alignment-based practice from the heart. Together, we strive to build a strong, diverse yoga community and foster an environment in which every student feels welcomed, safe, and empowered.


GREENBUD is a professional partnership providing diverse specialize consulting and management Services in environment and sustainable development. Its Client include Garments, Pharmaceuticals, Textile, Washings, Ceramic, Leather, Plastic, Printing, Packaging and any hard-liner Industries in national and Multi-national community. Our plan is to be a part of the policies and help the different stakeholders to reach their sustainability goal. At the same time GREENBUD will act as a supporting annex to the industries to comply the national and international requirements.
We assure our business partners that we are committed to exceeding their expectations for a fully compliant, rewarding and continuing professional experience. GREENBUD is dedicated to improving the quality of life on our planet for the present as well as for future generations.
We delivered our services to the well-renowned companies in Bangladesh. We consistently focus on achieving and exceeding client needs.
We have finished numerous successful projects. Our expertise provides diversely specialized inspection and consulting services in environmental and sustainable development.
We are working as an accredited environmental consultancy firm.
We have professionally experienced team for environmental consultancy and inspection.
Our expertise are fully equipped with the modern equipment for any project.


text:
Leah "Dookie" Chase
Information about Leah "Dookie" Chase
Whatever You're Going to Do, You Better Do it and Enjoy Life.
About Leah "Dookie" Chase
See how Leah "Dookie" Chase is related to other HistoryMakers
Leah Chase, "the Queen of Creole Cuisine," was born January 6, 1923, in New Orleans, Louisiana, of Catholic Creole parents. She was sent to New Orleans in 1937 to live with her aunt and to attend St. Mary's Academy for high school. Her first job out of school was at the Oriental Laundry in the French Quarter. A week later, Chase was hired by the Colonial Restaurant on Chartres Street. She has been in the restaurant industry ever since.
In 1945, she met and married musician Edgar "Dooky" Chase II, whose parents owned the Dooky Chase Restaurant. At first, Chase spent her time raising her children and sewing, but once the children were old enough to attend school she began to work at the restaurant three days a week. She changed the menu to serve hot meals at lunchtime to black men who were beginning to work in offices. She started out as a hostess, but she was soon redecorating the restaurant and working as chef. Because of Chase, the Dooky Chase Restaurant is known for its good food, antiques and original African American art.
Chase has received many awards both for her culinary genius and her community service including: the coveted New Orleans Times Picayune 1997 Loving Cup Award, the Weiss Award from the National Conference of Christians and Jews, the Torch of Liberty Award, the University of New Orleans Entrepreneurship Award, the Outstanding Woman Award from the National Council of Negro Women, and numerous honors from the NAACP. She serves on many organizational boards including the Arts Council of New Orleans, the New Orleans Museum of Art and the Urban League. Chase is a frequent guest on many of the televised cooking shows and was visiting culinary professor at Nichols State University in 1996. She has four children, sixteen grandchildren and four great-grandchildren.
Chase passed away on June 1, 2019.
Slating of Leah Chase's interview
Leah Chase lists her favorites
Leah Chase talks about her family's history
Leah Chase talks about her ancestry
Leah Chase describes her Creole ancestry and the contributions of Creoles
Leah Chase talks about Patois
Leah Chase describes her father, Charles Lange
Leah Chase talks about her family
Leah Chase describes how her parents met
Leah Chase describes her mother, Hortensia Lange
Leah Chase describes the sights, smells, and sounds of her childhood
Leah Chase talks about her parents' value for education
Leah Chase talks about her Catholic education
Leah Chase describes her role models
Leah Chase describes her childhood personality
Leah Chase talks about her first jobs after high school
Leah Chase talks about her husband Dooky Chase and the Sandwich Shop
Leah Chase describes implementing changes at Dooky Chase's Restaurant, pt.1
Leah Chase describes her relationship with her mother-in-law, Emily Chase
Leah Chase talks about her battle to add art to Dooky Chase's Restaurant
Leah Chase talks about featuring the art of Jacob Lawrence, Jonathan T. Biggers, Clifton Webb, Lois Mailou Jones, and HistoryMakers Elizabeth Catlett, Jonathan Green, David…
Leah Chase describes her food and the chef community in New Orleans
Leah Chase talks about New Orleans chef Austin Leslie and managing restaurants
Leah Chase talks about popular menu items and the hours of operation at Dooky Chase's Restaurant
Leah Chase talks about Dooky Chase's Restaurant as a meeting place for civil rights organizations SNCC and COFO and activists like Oretha Castle Haley, James Baldwin, and…
Leah Chase talks about Dutch Morial, the first black mayor of New Orleans
Leah Chase describes her hopes and concerns for the black community
Leah Chase talks about her honors including the NAACP A.P. Tureaud Medal, the Loving Cup, and the Ella Brennan Savoir Faire Award
Leah Chase reflects upon her family's support and how they view her success
Leah Chase reflects upon her legacy
Leah Chase talks about how she would like to be remembered


text: Q: Elasticsearch Optimising Storage Using Elasticsearch v 6.2. I've just started looking at an index that's almost become unmanageable (and with obsolete fields) in terms of storage and see any possible ways to optimise it. When I looked at the mapping, it has around 200 fields with quite a bit of analysis applied. As a first step, I'd like to see which fields are occupying more space or in other words which field has more terms? I'd then produce a report to the business to see if this field is actually required or not. Is this stats possible to get in ES? Or any other pointers are welcome.

redpajama_set_name: RedPajamaStackExchange


Major League Baseball on Thursday said all 30 of its clubs will have extended safety netting behind home plate at their ballparks this season, aiming to provide greater protection from bats and balls in response to growing concerns over fan safety.
In response to the news from MLB's, Hagens Berman's Steve Berman said, "We are pleased to have pushed Major League Baseball to do the right thing — protect its fans.
We consider their decision to do so better late than never."
Did you purchase tickets to any MLB ballpark in the last four years?
Hagens Berman and Hilliard Muñoz and Gonzales LLP are representing ticket holders against the commissioner of MLB for grossly ignoring the safety risks to game attendees and spectators posed by foul balls and bats. If you think that the commissioner should act to protect spectators, and install safety netting from foul pole to foul pole, fill out the form or email MLB@hbsslaw.com.
Some of major league baseball's biggest fans – ticket holders – have filed a class-action lawsuit against the commissioner of Major League Baseball (MLB) association Rob Manfred, and the office of the commissioner, alleging Manfred has failed to uphold his duties to enact safety measures against the danger of foul ball and bat injuries through a widespread pattern of negligence, misrepresentations and omissions toward baseball spectators at MLB games.
The lawsuit alleges that tens of millions attend a Major League Baseball game annually, and every year fans of all ages, but often children, suffer horrific and preventable injuries, such as blindness, skull fractures, severe concussions and brain hemorrhages, when they are struck by a fast-moving ball or flying shrapnel from a shattered bat.
The complaint filed on July 13, 2015 in the U.S. District Court for the Northern District of California alleges that at the same time that the commissioner has failed to act to protect spectators, he has continued to make statements that promote Major League ballparks as safe and family-friendly and has sought to increase attendance of young fans – a demographic that is highly at risk for foul ball and bat injuries.
The nationwide class action seeks to change current MLB rules and practices, including requiring the MLB to retrofit all existing major league and minor league indoor and outdoor ballparks to extend protective netting from foul pole to foul pole by the beginning of the 2016-2017 MLB season. Relief sought also stipulates that all future ballparks intended to house major or minor league baseball games need to include at minimum this amount of safety netting. Plaintiffs also seek to create a program to study spectator injuries in an effort to continually reevaluate whether additional measures should be taken, so that precautionary measures can continue to evolve as the sport continues to evolve.
According to the suit, the combination of right-handed power pitchers and left-handed hitters that are likely to swing late at fastballs tends to make the area behind and near the third base dugouts particularly dangerous. The first and third base lines are also dangerous because of their proximity to the bases, where players often throw at high velocity toward the bases in attempts to tag out runners.
The suit also alleges that the commissioner has actively increased distractions and entertainment in the parks to appeal to younger fans, including enhanced larger JumboTron screens and displays.
Fill out the form on this page or email MLB@hbsslaw.com to find out your rights.
Hagens Berman files amended complaint adding as defendants all 30 MLB member teams.


TORONTO, Oct. 2, 2018 /CNW/ - The Green Organic Dutchman Holdings Ltd. (the "Company" or "TGOD") (TGOD) (us:TGODF) is pleased to announce the closing of the previously announced acquisition of HemPoland. The transaction has received approval from the Toronto Stock Exchange and cements the Company's commitment to building shareholder value through international expansion.
MONCTON, NB, Oct. 2, 2018 /CNW/ - Organigram Holdings Inc. (OGI) (otcqx:OGRMF), the parent company of Organigram Inc. (the "Company" or "Organigram"), a leading licensed producer of medical marijuana, is pleased to announce that is has closed the previously-announced private placement investment in Eviana Health Corporation ("Eviana" or the "Issuer").
San Diego, CA, Oct. 02, 2018 (GLOBE NEWSWIRE) -- via NEWMEDIAWIRE -- Generation NEXT Franchise Brands (otcqb:VEND) reports quarterly franchise bookings of $11.9 million as of September 30, 2018, before certain adjustments. Furthermore, the company has additional booking commitments of approximately $129 million. The franchise company, whose Reis & Irvy's frozen yogurt robots launched in April of 2016, finished the quarter ended September 30, 2018 with 285 franchisees.
VANCOUVER, BC / ACCESSWIRE / October 2, 2018 / MGX Minerals Inc. ("MGX" or the "Company") (cse:XMG)(otcqb:MGXMF)(1MG) is pleased to report that engineering subsidiary PurLucid Treatment Solutions ("PurLucid") is shipping the first petrolithium and advanced wastewater treatment system on Monday, October 8th. The commercial-scale 750 barrel per day (bpd) system will be delivered to a centralized treatment and processing facility north of Edmonton and proximate to the Alberta oilsands. Installation of the plant will take approximately three weeks to complete.
MONROVIA, California, October 2, 2018 /PRNewswire/ -- Sugarmade, Inc. (otcqb:SGMD), one of the largest publicly traded hydroponics supply companies, today announces it has issued formal proposals to acquire two hydroponic cultivation supply companies within the fast growing cannabis sector. Sugarmade recently reiterated its 2019 revenue guidance of $30 million representing growth of over 700%, but should these acquisition efforts be successful, the Company would immediately boost its revenue guidance to $75 million for next year, representing one of the fastest revenue growth rates in the cannabis industry. In addition to boosting the top line growth rate, management of Sugarmade believes these acquisitions will also be highly accretive to both overall shareholder value and net income.
TORONTO, ON, Oct. 02, 2018 (GLOBE NEWSWIRE) -- via NEWMEDIAWIRE - Amfil Technologies Inc AMFE, -2.58% is pleased to announce that Friday October 12th will be the official opening date of Snakes & Lattes' first US based retail location in Tempe, Arizona. Additionally, Snakes & Lattes SAS and Morning will have a presence at the Essen Spiel Messe board game convention in Germany where it will debut its newly published game titles.
GARDEN GROVE, Calif., Oct. 02, 2018 (GLOBE NEWSWIRE) -- KushCo Holdings, Inc. (otcqb:KSHB) ("KushCo" or the "Company"), the parent company of innovative cannabis industry leaders such as Kush Supply Co., Kush Energy, The Hybrid Creative, and Koleto Packaging Solutions, which provide a range of services and products for the regulated cannabis, CBD and other related industries, announced today that the Company is changing the name of its Kush Bottles division to Kush Supply Co., effective October 1, 2018.


Panzerkampfwagen Panter Ausf. G and Ausf. A white metal tracks.
Panzerkampfwagen Panther was the most effective medium tank of German army during WWII that employed most advanced technological ideas of German constructors. First produced in December 1942 it was serving in the both Eastern and Western fronts until the end of the war. Moreover, in 1944 a tank destroyer, named Jagdpanther was developed on the successful chassis of Panther tank. Together with Jagdpanther and Bergepanther (engineer recovery vehicle) more than 6000 chassis were made and being a popular subject amongst modellers there is always a room for aftermarket products.
MasterClub is well known for their range of resin tracks which is now being extended to white metal tracks simply transferring knowledge and technology from resin moulds. This set MTL35001 is no exception and is similar to resin product reviewed by Frank Glackin some years ago and a link to that review is at the end of this review.
Packed in a plastic box with a lid on top it contains 210 white metal track links and 440 resin track pins suitable for a Panther Ausf. A or Ausf G. together with vehicles based on these chassis. The metal tracks are finely cast and have open guide horns together with ice cleats on the outer surface. The track pins appear similar although detail is a bit different on the two types so it is necessary to keep one of them on the inner side of the tracks and the other one on the outer. The assembly is really straightforward and unlike the Panzer III/IV set I reviewed recently there is no need to probe the rack pin holes as they fit perfectly without any extra force applied. The track chain that is seen on the images was assembled within 15 minutes. Again, the advantage of these tracks is full articulation after assembly and no need for CA glue. I quickly checked the assembled section of tracks on the sprockets from most popular kits – Dragon, Tamiya and Zvezda (the latter two were provided by Sergey Glubyshev). Dragon and Tamiya have excellent fit while the fit around Zvezda sprocket is not tight as it appears to have slightly smaller diameter then Dragon and Tamiya sprocket.
Dimension-wise the tracks produced by MasterClub perfectly fit the measurements (I checked the track links against the plans of the original track thanks to fellow modellers at tigercorner.ru). Width, distance between horns, pitch and teeth height match these plans as well as examples of real tracks from Russian museums. Just note that the width calculation was based on the drawings that indicate that tracks are 656mm wide and not 660 mm as it says per technical description of the tank. I find it a bit strange but it is the same on real examples.
Overall, this is a great set of metal tracks which articulates after assembly and has great detail achieved by delicate casting and inclusion of resin track pins.
Highs: Delicate detail, no glue required, fully articulated and fits manufacturers mentioned in this review.
Lows: Might be hard to find in the shops.
Thanks guys, Christophe, you are correct and Darren fixed that in the text already. Thanks for noticing that.
To be clear : the scale tracks are 3/4 of mm light in their width for the scale ? . How could this be noticed ? ( by non-robots ) .
No, this is not possible to notice of course. Just for those who really care about 0,75mm. Otherwise - they are great!
No problem. Here are fully assembled tracks on Jagdpanther hull.
Thanks, the blocks on the hull are placed incorrect. I will fix that later when I have time to build the model.


text:
Last change on this file since 2110 was 63, checked in by fielding@…, 13 years ago
Update issues list URI and draft names
Obsoletes: 2068, 2616 J. Gettys
(if approved) One Laptop per Child
Intended status: Standards Track J. Mogul
Expires: June 22, 2008 HP
This Internet-Draft will expire on June 22, 2008.
Fielding, et al. Expires June 22, 2008 [Page 1]
Internet-Draft HTTP/1.1 December 2007
This version of the HTTP specification contains only minimal
editorial changes from [RFC2616] (abstract, introductory paragraph,
and authors' addresses). All other changes are due to partitioning
the original into seven mostly independent parts. The intent is for
readers of future drafts to able to use draft 00 as the basis for
comparison when the WG makes later changes to the specification text.
This draft will shortly be followed by draft 01 (containing the first
round of changes that have already been agreed to on the mailing
list). There is no point in reviewing this draft other than to
verify that the partitioning has been done correctly. Roy T.
Fielding, Yves Lafon, and Julian Reschke will be the editors after
draft 00 is submitted.
at <http://www3.tools.ietf.org/wg/httpbis/trac/report/11> and related
<http://www3.tools.ietf.org/wg/httpbis/>.
Appendix A. Internet Media Type message/http and
application/http . . . . . . . . . . . . . . . . . . 53
URI schemes. Right now it only includes the extracted relevant
sections of [RFC2616].
across the Internet. HTTP/1.0, as defined by RFC 1945 [RFC1945],
improved the protocol by allowing messages to be in the format of
MIME-like messages, containing metainformation about the data
transferred and modifiers on the request/response semantics.
However, HTTP/1.0 does not sufficiently take into consideration the
effects of hierarchical proxies, caching, the need for persistent
connections, or virtual hosts. In addition, the proliferation of
incompletely-implemented applications calling themselves "HTTP/1.0"
has necessitated a protocol version change in order for two
communicating applications to determine each other's true
are passed in a format similar to that used by Internet mail [RFC822]
as defined by the Multipurpose Internet Mail Extensions (MIME)
those supported by the SMTP [RFC821], NNTP [RFC977], FTP [RFC959],
Fielding, et al. Expires June 22, 2008 [Page 10]
default port is TCP 80 [RFC1700], but other ports can be used. This
does not preclude HTTP from being implemented on top of any other
protocol on the Internet, or on other networks. HTTP only presumes a
reliable transport; any protocol that provides such guarantees can be
used; the mapping of the HTTP/1.1 request and response structures
onto the transport data units of the protocol in question is outside
the scope of this specification.
used by RFC 822 [RFC822]. Implementors will need to be familiar with
the notation in order to understand this specification. The
augmented BNF includes the following constructs:
defined by its associated media type, as described in [Part3].
8859-1 [ISO-8859] only when encoded according to the rules of RFC
changed. See RFC 2145 [RFC2145] for a fuller explanation.
when to send specific HTTP-Version values, see RFC 2145 [RFC2145].
since the publication of RFC 2068 [RFC2068], caching proxies MUST,
gateways MAY, and tunnels MUST NOT upgrade the request to the highest
version they support. The proxy/gateway's response to that request
MUST be in the same major version as the request.
Identifiers (URI): Generic Syntax and Semantics," RFC 2396 [RFC2396]
(which replaces RFCs 1738 [RFC1738] and RFC 1808 [RFC1808]). This
specification adopts the definitions of "URI-reference",
"absoluteURI", "relativeURI", "port", "host","abs_path", "rel_path",
and "authority" from that specification.
than the server can handle (see Section 9.4.15 of [Part2]).
for the resource is abs_path (Section 5.1.2). The use of IP
addresses in URLs SHOULD be avoided whenever possible (see RFC 1900
[RFC1900]). If the abs_path is not present in the URL, it MUST be
given as "/" when used as a Request-URI for a resource
o An empty abs_path is equivalent to an abs_path of "/".
RFC 2396 [RFC2396]) are equivalent to their ""%" HEX HEX" encoding.
a fixed-length subset of that defined by RFC 1123 [RFC1123] (an
update to RFC 822 [RFC822]). The second format is in common use, but
is based on the obsolete RFC 850 [RFC1036] date format and lacks a
four-digit year. HTTP/1.1 clients and servers that parse the date
value MUST accept all three formats (for compatibility with
HTTP/1.0), though they MUST only generate the RFC 1123 format for
representing HTTP-date values in header fields. See Appendix B for
further information.
following tokens: "chunked" (Section 3.4.1), "identity" (section
3.6.2), "gzip" ([Part3]), "compress" ([Part3]), and "deflate"
([Part3]).
as new content-coding value tokens ([Part3]).
message format of RFC 822 [RFC822] for transferring entities (the
payload of the message). Both types of message consist of a start-
line, zero or more header fields (also known as "headers"), an empty
line (i.e., a line with nothing preceding the CRLF) indicating the
end of the header fields, and possibly a message-body.
the same generic format as that given in Section 3.1 of RFC 822
[RFC822]. Each header field consists of a name followed by a colon
(":") and the field value. Field names are case-insensitive. The
field value MAY be preceded by any amount of LWS, though a single SP
is preferred. Header fields can be extended over multiple lines by
preceding each extra line with at least one SP or HT. Applications
[Part2]) does not allow sending an entity-body in requests. A server
SHOULD read and forward a message-body on any request; if the request
method does not include defined semantics for an entity-body, then
the message-body SHOULD be ignored when handling the request.
2. If a Transfer-Encoding header field (Section 8.7) is present and
defined by use of the "chunked" transfer-coding (Section 3.4),
the ransfer-length is not otherwise specified, then this self-
elimiting media type defines the transfer-length. This media
type UST NOT be used unless the sender knows that the recipient
can arse it; the presence in a request of a Range header with
ultiple byte-range specifiers from a 1.1 client implies that the
lient can parse multipart/byteranges responses.
non-identity transfer-coding. If the message does include a non-
identity transfer-coding, the Content-Length MUST be ignored.
path of the URI MUST be transmitted (see Section 3.2.1, abs_path) as
defined in Section 9 of [Part2]. The Reason-Phrase is intended to
give a short textual description of the Status-Code. The Status-Code
is intended for use by automata and the Reason-Phrase is intended for
the human user. The client is not required to examine or display the
Reason-Phrase.
with an HTTP/1.0 client (but see RFC 2068 [RFC2068] for information
and discussion of the problems with the Keep-Alive header implemented
by many HTTP/1.0 clients).
RFC 822. The field value is an HTTP-date, as described in
Section 3.3.1; it MUST be sent in RFC 1123 [RFC1123]-date format.
<http://www.w3.org/pub/WWW/> would properly include:
RFC 822 [RFC822] and is intended to be used for tracking message
forwards, avoiding request loops, and identifying the protocol
capabilities of all senders along the request/response chain.
using the HTTP protocol to provide data are responsible for ensuring
that such material is not distributed without the permission of any
constructs defined by David H. Crocker for RFC 822 [RFC822].
Similarly, it reuses many of the definitions provided by Nathaniel
Borenstein and Ned Freed for MIME [RFC2045]. We hope that their
inclusion in this specification will help reduce past confusion over
the relationship between HTTP and Internet mail message formats.
[ISO-8859]
"Information technology - 8-bit single byte coded graphic
- character sets", 1987-1990.
Part 1: Latin alphabet No. 1, ISO-8859-1:1987. Part 2:
Latin alphabet No. 2, ISO-8859-2, 1987. Part 3: Latin
alphabet No. 3, ISO-8859-3, 1988. Part 4: Latin alphabet
No. 4, ISO-8859-4, 1988. Part 5: Latin/Cyrillic alphabet,
ISO-8859-5, 1988. Part 6: Latin/Arabic alphabet, ISO-
8859-6, 1987. Part 7: Latin/Greek alphabet, ISO-8859-7,
1987. Part 8: Latin/Hebrew alphabet, ISO-8859-8, 1988.
and PNG", Proceedings of ACM SIGCOMM '97, Cannes France ,
Dec 1995.
Masinter, L., Leach, P., and T. Berners-Lee, "HTTP/1.1,
part 2: Message Semantics",
draft-ietf-httpbis-p2-semantics-00 (work in progress),
part 3: Message Payload and Content Negotiation",
draft-ietf-httpbis-p3-payload-00 (work in progress),
part 6: Caching", draft-ietf-httpbis-p6-cache-00 (work in
progress), December 2007.
[RFC1036] Horton, M. and R. Adams, "Standard for interchange of
USENET messages", RFC 1036, December 1987.
[RFC1590] Postel, J., "Media Type Registration Procedure", RFC 1590,
[RFC1700] Reynolds, J. and J. Postel, "Assigned Numbers", STD 2,
[RFC821] Postel, J., "Simple Mail Transfer Protocol", STD 10,
RFC 821, August 1982.
[RFC977] Kantor, B. and P. Lapsley, "Network News Transfer
Protocol", RFC 977, February 1986.
HTTP Performance", ISI Research Report ISI/RR-98-463
(original report dated Aug.1996), Aug 1998,
<http://www.isi.edu/touch/pubs/http-perf96/>.
Appendix A. Internet Media Type message/http and application/http
intermixed). The following is to be registered with IANA [RFC1590].
Media Type name: message
Media subtype name: http
Media Type name: application
Keep-Alive and Keep-Alive header) is documented in RFC 2068.
[RFC2068]
the conventions laid out in RFC 2119 [RFC2119].
implementations (Section 3.1)
HT 13
http_URL 17
LOALPHA 13
UPALPHA 13


Ever think about paying for your cross-compiler on a per-use basis?
Look at the EDA (Electronic Design automation) domain. These tools are used by hardware designers to create new chips, lay out PC boards, and run complex simulations and emulations. They're expensive, sometimes in excess of a million dollars when hardware accelerators speed the IC emulation process.
For the last couple of years some EDA vendors have been dabbling with providing access to their tools on-line. One version lets users upload designs to tools hosted at the vendor's site. The compiled or emulated design then zips back to the user over the net. A variant lets you download the tool, which runs for hours, days or weeks before turning into empty bits. In either case, charges accumulate on a per-use or per-hour basis.
So far, though, the traditional outright sale of EDA products, for cash on the barrelhead, is the only model proven profitable. At the moment Internet-tool-rental seems as viable a business model as so many others employed by the dot-coms.
Yet, it is a pretty cool idea. Partly there's the engineering ego-thing at play; after all, don't we all just know we're good enough to get the design right on the first try? Why buy when we're hardly ever gonna use the thing? (As a reformed ICE vendor I well remember so many developers who figured renting was cheaper than buying. Almost without exception that 3 month rental drifted into 12, 24, or more. A serious profit center, dontcha know).
The EDA and firmware tool worlds are, well, worlds apart. Each caters to a different breed of developer, one the hardware designer, the other the software folks. I think that those purveying firmware tools (compilers, emulators, and the like) could learn a lot from their EDA cousins. Why not deliver the products via the net?
Serious access to non-crippled tools has some big benefits. How do you know, for sure, that the product works - I mean really works - with your complex design? Sure, we can take advantage of the almost universal 30 day trial, but - again speaking from vendor-experience - practically no developer ever gets around to running exhaustive, meaningful tests till long after the trial period expires.
Perhaps your company designs around lots of different technologies; an 8051 on this product, 68332 on another, and others as needs vary. Consulting outfits, especially, are at the mercy of their customers needs and biases, so can seldom port the toolchain between projects. Why buy when you'll be done with the tool, forever, in a few months?
Even if you're not consulting I bet there's lots of things you use infrequently at best. Me, I'd love to be able to get rid of Visual C++. I use it a few times a year, but for the rest of the time it sits there, eating up system resources. How much better to rent the thing, always using the latest version!
(The extreme of this is to get rid of the PC and replace it with a gateway into the net. Need a word processor? Download it as required. Me, I'd rather have a big old hard disk with all of the commonly-used programs resident and running fast, all of the time. I just don't want to have to own every program I'd ever use, no matter how seldom).
As a project waxes and wanes the size of the team varies. Need an extra developer for just a month or two? Who wants to pay big bucks for one extra compiler seat for that time? Embedded cross compilers can cost $5-10k, far too much for such a short-term need.
There's some downside: upload your code to the vendor's server and the company's lawyers will go into spasms of brief-writing over their fear of losing trade-secret protection. I, for one, can live with the threat of losing some control over the source. Clearly the open-source movement is showing us that "secret" is not necessarily the same as "good business practice".
Perhaps my biggest fear is that I may lose access to old tool versions. Embedded systems live forever. In two, five or more years, when the 22 year old marketing weenie wants a quick feature change to the product, I want to use the old tried-and-true compiler. Over the course of those years surely the tool will have evolved considerably, from version 4.0 to 6.2, with new bugs and issues. At the very least the code generator will be different. which means the real time performance of my product will change. If the net-delivered tool is always the current revision, then I've lost access to that version 4.0 that we know worked so well on this project.
What do you think? Would you rather dynamically rent your cross development tools rather than buy?


Corrected entry: Just after Lister first enters the Stasis Leak and ends up in the shower, there is a shot of a man standing in front of the sinks. Above his head is a digital notice board. The date written on it is Wednesday 2nd March 2077. But 02/07/2077 will be a Tuesday.
Correction: The calendar has been altered since the present day, as evidenced by the newscaster in "Better Than Life" giving the date as "the 27th of Geldof".
Corrected entry: When we first see the photograph of Lister and Kochanski married, Lister is smiling in the photo. The second time we see it Lister is not smiling.
Correction: This is intentional. The photo reflects Lister's mood. When he believes he is the groom he is smiling but when he thinks he is the best man he is not smiling because he believes he has just seen the woman he loves marry someone else.
Corrected entry: Rimmer says that if he brought the past Rimmer back, there would be two Rimmers in the future. However he already make 2 Rimmers in the previous series in the episode "Me²", and he hated the fact, so why would he suggest that idea again?
Correction: Actually, Rimmer wanted to bring his past self back in statis as if he did so, he would survive the radiation leak and would not be a hologram.


text:
Send a Classified
Send an Obituary
Send an Ad
About the Herald Times
About Meeker
Meeker History
About Rangely
Rangely History
Meeker Sports
Rangely Sports
HomeMeekerERBM to participate in Guinness World Record: World's Largest Swimming Lesson
ERBM to participate in Guinness World Record: World's Largest Swimming Lesson
June 18, 2014 Special to the Herald Times Meeker, Popular Stories 0
courtesy photo Thousands of kids and adults at aquatic facilities around the world, including the ERBM aquatics center, will unite to be part of an effort to set a new Guinness World Record. The global record attempt for the World's Largest Swimming Lesson (WLSL), will take place at 8:30 a.m., June, 20, when everyone is invited to be a part of a world record setting team for free. Parents can learn more about the phenomenal event by visiting WLSL.org.
Thousands of kids and adults at aquatic facilities around the world, including the ERBM aquatics center, will unite to be part of an effort to set a new Guinness World Record. The global record attempt for the World's Largest Swimming Lesson (WLSL), will take place at 8:30 a.m., June, 20, when everyone is invited to be a part of a world record setting team for free. Parents can learn more about the phenomenal event by visiting WLSL.org.
MEEKER I June 20, tens of thousands of kids and adults at aquatic facilities around the world will unite for the fifth year in a row to set a new Guinness World Record. The global record attempt for The World's Largest Swimming Lesson (WLSL) will take place at the Meeker Recreation Center.
Imagine being part of a world record setting team! Send the kids with their swimsuits to the Meeker Recreation Center by 8:30 a.m. to be a part of this free event.
Team WLSL holds the current Guinness World Record for the largest simultaneous swimming lesson, which stands at 32,450 participants representing 13 different countries across five continents. The 2013 WLSL event generated more than 50 million media impressions, spreading the event's important message to hundreds of thousands of families.
Tragically, drowning remains the leading cause of unintended, injury-related death for children ages 1-5, and the second leading cause of accidental death for children under 14. Research shows participation in formal swimming lessons can reduce the risk of drowning by 88 percent among children aged 1 to 4, yet many kids do not receive formal swimming or water safety training.
ERBM Recreation and Park District will be serving as an official host location facility for the WLSL 2014 event. Parents are invited to learn more about this phenomenal event by visiting WLSL.org.
ERBM
World's Largest Swimming Lesson
Still time to sign up for CNCC's College for Kids
Hoops for Charity champions give to local non-profits
January 3, 2017 Special to the Herald Times 0
MEEKER | These are the champions of the 2016 Hoops for Charity 3-on-3 Basketball Tournament held Dec. 20 and hosted by the ERBM Recreation & Park District. A portion of the proceeds will be donated […]
June 15, 2014 Special to the Herald Times 0
ERBM hosts third through sixth grade basketball games
October 29, 2019 Special to the Herald Times 0
MEEKER | ERBM Recreation and Park District hosted the NW Colorado Developmental League third-sixth grade girls' recreation and competitive games on Saturday, Oct. 19 at the MHS and MES gyms. Teams from Rifle, New Castle, […]
County Beat: January 16, 2020
Trooper Tips: Older drivers
Editor's Column: Collective grief
Colowyo closure will impact 46 Meeker-area employees
Obituary: David Lee Kuhn
Please support this website by adding us to your whitelist in your ad blocker. Ads help us bring you quality online content! Thank you!


You are browsing the archive for demons.
Born of the temperance movement, this poem dramatises the ills of drinking schnapps, through one man's bloody battle with thousands of intoxicated demons.
Babylonian and Assyrian incantations against various demons, ghouls, vampires, hobgoblins, ghosts, and evil spirits.


The spiritual art of sacrifice is about how sacrificial actions manifest new life energy. In 1989 as we were still just discovering the pieces and developing Oracle of the Heart™ my wife and I were invited to accompany a group of Mayan scholars and spiritual teachers on a trip to the Yucatan Peninsula. We were to perform traditional ceremonies in seven Mayan sacred sites. Among these scholars were Hunbatz Men, a "Mayan Elder", Barbara Hand Clow, author and owner of Bear and Company Publishing and Jose Arguelles, author of "The Mayan Factor" and instigator of the Harmonic Convergence.
As Barbara and I were preparing for this amazing trip we learned of Maya's that were very different from the barbaric blood thirsty ones that most of us learned about in school. We discovered that there were in fact two distinctly different groups of Mayans. The first group were enlightened thinkers, visionaries, architects. Culturally and scientifically they were the most advanced people on earth, then and now. The second group imitated these enlightened ones; but then imitators lacking in soul awareness often misinterpret the intentions of those whom they are imitating, especially when there is a 200 year gap between the first group and their imitators.
This is really quite common. When the enlightened leaders are gone their words are often misunderstood by the generations that follow. Truth they say is a two edged sword. So it is not ha rd to imagine that the original Mayans taught, as Jesus did, "to ascend into the heavens you must sacrifice the hardness of your hearts." Then along came the 'imitators' who decided that this means they must cut out the hearts of their enemies and of innocent young women to appease their angry gods and to control the masses.
While in Palenque Barbara and I participated in a sunrise peace ceremony at Temple of the Sun. While standing in prayerf ul meditation in front of the Sun Cross Codex that is carved into a massive stone there, we were both taken into very high states of awareness wherein we were given keys which would ultimately enable us to complete our work with Oracle of the Heart™. As it turns out, that codex is all about the spiritual art of sacrificing the hardness of our hearts. This Mayan art is also what Oracle of the Heart™ helps us to do with ease and grace.
YouTube of that trip: 'The Great Mayan Initiation'.
I will use the first of Oracle of the Hearts 128 Doors of Perception as an example of this sacred art of sacrifice. The Door of Perception is; "I am not receiving". By simply repeating this phrase "I am not receiving" you may call forth memories of experiences when you were not receiving. What comes to mind for me are experiences of not receiving encouragement and acceptance. I was a poor student in a family where education was believed to be the Holy Grail for success. Poor grades meant criticism, punishment and restriction, and later on it meant crappy jobs and low pay.
Working with the 'Doors of Perception' meditations harvesting your memories quite often bring up defensive feelings and these defensive feelings are what harden our hearts. In this process we face our memories and affirm the same energy that they came in on. In the case of the first primal imprint, it is "Receiving". So in my creative imagination I look into the eyes of whoever shows up in that memory. Then I affirm "I am receiving", with an open heart. Opening my heart allows me to let go of my defensive feelings. Creative loving ones flow in which continue to naturally dissolve the defensive ones.
Next we open a channel directly into spirit. Thinking of that same person we say "Thank you", which opens our human heart. And finally we say "Bless Us" for the Highest Good" opening a channel to heal our old wounds. The result releases us from the clutches of our past.
This is how we sacrifice the hardness of our hearts. All that we offer here is to empower you to reclaim valuable life forces still entangled within unresolved past events. This inner awareness technology enables you to ascend to new levels. To truly 'See Yourself Loving' opens you to new creativity and fulfillment, living more fully and wholeheartedly in the present.
JOIN US as Full Access Members and have all that we have created from Oracle of the Heart and learn to Sacrifice the Hardness of Your Heart with Loving Heart Experiences.


Cat & The Dreamer, Free Today!
Okay, lovely people, just a really quick message to say that my first novella, Cat & The Dreamer, is free for Kindle all day today – Monday 12 March!
Please buy it, share this post, shout it from the rooftops, and go door-to-door around your neighbourhood!
And if you feel moved to do so, a review would be very much appreciated.
You can check out the book from this link right here.
So, what's Cat & The Dreamer about?
Author Annalisa CrawfordPosted on 12 March, 2018 11 March, 2018 Categories BooksTags #FreeKindleBook, coming of age, new adult, novella14 Comments on Cat & The Dreamer, Free Today!