text:
package com.peterphi.std.guice.hibernate.webquery.impl;

import com.peterphi.std.guice.database.annotation.EagerFetch;
import com.peterphi.std.guice.restclient.jaxb.webqueryschema.WQEntitySchema;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.graph.RootGraph;

import javax.persistence.DiscriminatorValue;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Subgraph;
import javax.persistence.Table;
import javax.persistence.metamodel.Attribute;
import javax.persistence.metamodel.EmbeddableType;
import javax.persistence.metamodel.EntityType;
import javax.persistence.metamodel.PluralAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.Type;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Stack;
import java.util.stream.Collectors;

public class QEntity
{
	private static final Logger log = Logger.getLogger(QEntity.class);

	private final Class<?> clazz;
	private String name;

	private Map<String, QProperty> properties = new HashMap<>();
	private Map<String, QRelation> relations = new HashMap<>();

	private List<QEntity> descendants = Collections.emptyList();

	// Only one of the following should be populated
	private EntityType<?> metamodelEntity;
	private EmbeddableType<?> metamodelEmbeddable;

	// Populated to let us get/set the ID of an entity dynamically
	private PropertyWrapper idProperty;

	/**
	 * Relations that are marked as having an eager fetch
	 */
	private Set<String> eagerRelations = new HashSet<>(0);

	/**
	 * A full list of the default relations (including child relations) to expand
	 */
	private Set<String> defaultExpand;
	/**
	 * A JPA2.1 EntityGraph version of defaultExpand
	 */
	private RootGraph defaultExpandGraph;

	/**
	 * Relations that don't have a QRelation (because they're not to an @Entity or @Embeddable)
	 */
	private Map<String, Attribute> nonEntityRelations = new HashMap<>(0);

	public QEntity(Class<?> clazz)
	{
		this.clazz = clazz;
	}

	public Class<?> getEntityClass()
	{
		return clazz;
	}

	public EntityType<?> getMetamodelEntity()
	{
		return this.metamodelEntity;
	}

	/**
	 * Parse an @Entity
	 *
	 * @param entityFactory
	 * @param metadata
	 * @param sessionFactory
	 */
	void parse(QEntityFactory entityFactory, EntityType<?> metadata, SessionFactoryImplementor sessionFactory)
	{
		this.metamodelEntity = metadata;
		this.name = metadata.getName();

		for (Attribute<?, ?> attribute : metadata.getAttributes())
		{
			parseFields(entityFactory, sessionFactory, null, attribute);
		}

		// Parse top-level properties

		// Add identifier property
		{
			if (!metadata.hasSingleIdAttribute())
				throw new IllegalArgumentException("@IdClass Entity not supported! " + metadata.getJavaType());

			Type idType = metadata.getIdType();

			switch (idType.getPersistenceType())
			{
				case BASIC:
					break; // No action necessary, will be processed like a normal field
				case EMBEDDABLE:
				{
					EmbeddableType<?> emb = (EmbeddableType<?>) idType;

					parseEmbeddable(entityFactory, sessionFactory, "id", emb);
					break;
				}
				default:
					throw new IllegalArgumentException("Cannot handle id type: " + idType.getPersistenceType() + ": " + idType);
			}
		}

		// Add links to descendants
		{
			final List<QEntity> descendants = entityFactory.getSubclasses(clazz);

			if (!descendants.isEmpty())
				this.descendants = descendants;
		}

		// Figure out the id method/field
		final String idPropertyName = getIdPropertyName();

		if (idPropertyName != null)
			this.idProperty = new PropertyWrapper(clazz, idPropertyName);
	}

	/**
	 * Parse an @Embeddable
	 *
	 * @param entityFactory
	 * @param sessionFactory
	 * @param prefix
	 * @param type
	 */
	public void parseEmbeddable(final QEntityFactory entityFactory,
	                            final SessionFactoryImplementor sessionFactory,
	                            final String prefix,
	                            final EmbeddableType<?> type)
	{
		this.metamodelEmbeddable = type;
		// Make sure the entity factory sees this embeddable
		entityFactory.getEmbeddable(type.getJavaType(), type);

		for (Attribute<?, ?> attribute : type.getAttributes())
		{
			parseFields(entityFactory, sessionFactory, prefix, attribute);
		}
	}

	private List<Field> getAllFields(Class clazz)
	{
		List<Field> fields = new ArrayList<>();

		while (clazz != null)
		{
			fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
			clazz = clazz.getSuperclass();
		}

		return fields;
	}

	protected boolean isEagerFetch(final Attribute<?, ?> attribute)
	{
		if (attribute.isCollection() || attribute.isAssociation())
		{
			final Member member = attribute.getJavaMember();

			if (member instanceof AnnotatedElement)
			{
				final AnnotatedElement el = (AnnotatedElement) member;

				final boolean hasEagerFetch = el.isAnnotationPresent(EagerFetch.class);

				final FetchType fetchType;
				if (el.isAnnotationPresent(OneToMany.class))
					fetchType = el.getAnnotation(OneToMany.class).fetch();
				else if (el.isAnnotationPresent(ManyToOne.class))
					fetchType = el.getAnnotation(ManyToOne.class).fetch();
				else if (el.isAnnotationPresent(OneToOne.class))
					fetchType = el.getAnnotation(OneToOne.class).fetch();
				else if (el.isAnnotationPresent(ElementCollection.class))
					fetchType = el.getAnnotation(ElementCollection.class).fetch();
				else if (el.isAnnotationPresent(ManyToMany.class))
					fetchType = el.getAnnotation(ManyToMany.class).fetch();
				else
					return false;

				if (hasEagerFetch && fetchType == FetchType.EAGER)
					log.warn(
							"ENTITY HAS @EagerFetch but also JPA fetch=EAGER annotation - will not be able to instruct Hibernate to suppress fetching this relation: " +
							clazz +
							" " +
							member.toString());

				return (hasEagerFetch || fetchType == FetchType.EAGER);
			}
		}

		return false;
	}

	public Set<String> getEagerFetch()
	{
		if (this.defaultExpand == null)
		{
			Set<String> populate = new HashSet<>();

			getEagerFetch(new HashSet<>(), new Stack<>(), populate);

			this.defaultExpand = Collections.unmodifiableSet(populate);
		}

		return this.defaultExpand;
	}

	protected void getEagerFetch(Set<QEntity> visited, Stack<String> path, Set<String> populate)
	{
		if (visited.contains(this))
			return;
		else
			visited.add(this);

		for (String eagerRelation : eagerRelations)
		{
			// Always add the relation, even if it's not a part of the QEntity parse structure (e.g. may be a Map or some other ElementCollection)
			if (path.isEmpty())
				populate.add(eagerRelation);
			else
				populate.add(StringUtils.join(path, '.') + "." + eagerRelation);

			// If this is a known relation then expand it further
			if (hasRelation(eagerRelation))
			{
				path.push(eagerRelation);

				final QEntity entity = getRelation(eagerRelation).getEntity();

				entity.getEagerFetch(visited, path, populate);

				path.pop();
			}
		}
	}

	private void parseFields(final QEntityFactory entityFactory,
	                         final SessionFactoryImplementor sessionFactory,
	                         final String prefix,
	                         final Attribute<?, ?> attribute)
	{
		final String name = attribute.getName();
		//final javax.persistence.metamodel.Type<?> type;
		final Class<?> clazz;
		final boolean isCollection;
		final boolean nullable;

		// Transparently unwrap collections
		if (attribute.isCollection())
		{
			isCollection = true;
			nullable = false;

			//type = ((PluralAttribute<?, ?, ?>) attribute).getElementType();
			clazz = ((PluralAttribute<?, ?, ?>) attribute).getElementType().getJavaType();
		}
		else
		{
			isCollection = false;
			//type = attribute.getDeclaringType();
			nullable = (attribute instanceof SingularAttribute) ? ((SingularAttribute) attribute).isOptional() : false;
			clazz = attribute.getJavaType();
		}

		// TODO is it also meaningful to add the parent composite type as a field too?
		// TODO if not we should have this as a separate if condition
		if (attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.EMBEDDED && !isCollection)
		{
			SingularAttribute<?, ?> attr = (SingularAttribute<?, ?>) attribute;
			EmbeddableType<?> ct = (EmbeddableType<?>) attr.getType();

			parseEmbeddable(entityFactory, sessionFactory, prefix, ct);
		}
		else if (isCollection || attribute.isAssociation())
		{
			final boolean isEagerFetch = isEagerFetch(attribute);

			final QRelation relation;
			if (attribute.getPersistentAttributeType() != Attribute.PersistentAttributeType.EMBEDDED &&
			    attribute.getPersistentAttributeType() != Attribute.PersistentAttributeType.BASIC)
			{
				if (attribute.getPersistentAttributeType() != Attribute.PersistentAttributeType.ELEMENT_COLLECTION)
				{
					relation = new QRelation(this, prefix, name, entityFactory.get(clazz), nullable, isEagerFetch, isCollection);
				}
				else
				{
					PluralAttribute<?, ?, ?> plural = (PluralAttribute<?, ?, ?>) attribute;

					if (plural.getElementType().getPersistenceType() == Type.PersistenceType.EMBEDDABLE)
					{
						final EmbeddableType<?> ct = (EmbeddableType<?>) plural.getElementType();

						relation = new QRelation(this,
						                         prefix,
						                         name,
						                         entityFactory.getEmbeddable(ct.getJavaType(), ct),
						                         nullable,
						                         isEagerFetch,
						                         isCollection);
					}
					else if (plural.getElementType().getPersistenceType() == Type.PersistenceType.BASIC)
					{
						// Ignore this altogether. We should probably come up with a way of querying this relationship in the future
						relation = null;

						// Record the relation so we can use it in the future to determine if a relation is a collection for query optimisation
						nonEntityRelations.put(name, attribute);

						if (log.isDebugEnabled())
							log.debug("Ignoring BASIC ElementCollection " +
							          plural.getCollectionType() +
							          " of " +
							          plural.getElementType().getJavaType() +
							          " " +
							          plural.getName());
					}
					else
					{
						throw new IllegalArgumentException("Cannot handle ElementCollection of " +
						                                   plural.getElementType().getJavaType() +
						                                   " - type " +
						                                   plural.getElementType().getPersistenceType());
					}
				}
			}
			else if (isCollection && attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.EMBEDDED)
			{
				SingularAttribute<?, ?> attr = (SingularAttribute<?, ?>) attribute;
				EmbeddableType<?> ct = (EmbeddableType<?>) attr.getType();

				relation = new QRelation(this,
				                         prefix,
				                         name,
				                         entityFactory.getEmbeddable(clazz, ct),
				                         nullable,
				                         isEagerFetch,
				                         isCollection);
			}
			else
			{
				// N.B. this fallback catches collections we don't natively support but that we have some support for (i.e. for fetch joining against)
				// As result, we will not be able to record them as a QRelation, but we can record them as a non-entity relation
				relation = null;

				// Record the relation so we can use it in the future to determine if a relation is a collection for query optimisation
				nonEntityRelations.put(name, attribute);

				if (log.isDebugEnabled())
					log.debug("Unknown Collection type: " +
					          attribute.getPersistentAttributeType() +
					          " " +
					          attribute +
					          " with name " +
					          name +
					          " within " +
					          clazz +
					          " - ignoring");
			}

			if (relation != null)
			{
				relations.put(name, relation);

				// Set up a special property to allow constraining the collection size
				if (isCollection)
					properties.put(name + ":size", new QSizeProperty(relations.get(name)));
			}

			if (isEagerFetch)
			{
				this.eagerRelations.add(attribute.getName());
			}
		}
		else
		{
			final String newPrefix;

			if (prefix != null)
				newPrefix = prefix + ":" + name;
			else
				newPrefix = name;

			properties.put(newPrefix, new QProperty(this, prefix, name, clazz, nullable));
		}
	}

	public String getName()
	{
		final Table table = this.clazz.getAnnotation(Table.class);
		final Entity entity = this.clazz.getAnnotation(Entity.class);

		if (table != null && !StringUtils.isBlank(table.name()))
			return table.name();
		else if (entity != null && !StringUtils.isBlank(entity.name()))
			return entity.name();
		else
			return this.name;
	}

	public String getDiscriminatorValue()
	{
		final DiscriminatorValue annotation = clazz.getAnnotation(DiscriminatorValue.class);

		if (annotation != null)
			return annotation.value();
		else
			return clazz.getName();
	}

	public Set<String> getPropertyNames()
	{
		return Collections.unmodifiableSet(this.properties.keySet());
	}

	public Set<String> getRelationNames()
	{
		return Collections.unmodifiableSet(this.relations.keySet());
	}

	public boolean hasProperty(String name)
	{
		return properties.containsKey(name);
	}

	public boolean hasRelation(String name)
	{
		return relations.containsKey(name);
	}

	public boolean hasNonEntityRelation(final String name)
	{
		return nonEntityRelations.containsKey(name);
	}

	public boolean isNonEntityRelationCollection(final String name)
	{
		if (!hasNonEntityRelation(name))
			throw new IllegalArgumentException("No such non-entity relation: " + name + " on " + this);
		else
			return nonEntityRelations.get(name).isCollection();
	}

	public String getIdPropertyName()
	{
		if (metamodelEntity != null)
			return metamodelEntity.getId(metamodelEntity.getIdType().getJavaType()).getName();
		else
			return null;
	}

	/**
	 * Create a new instance of this entity, setting only the ID field
	 *
	 * @param id
	 *
	 * @return
	 */
	public Object newInstanceWithId(final Object id)
	{
		try
		{
			final Object o = clazz.newInstance();

			idProperty.set(o, id);

			return o;
		}
		catch (Throwable e)
		{
			throw new RuntimeException("Cannot create new instance of " +
			                           clazz +
			                           " with ID " +
			                           id +
			                           " (of type " +
			                           id.getClass() +
			                           ") populated!", e);
		}
	}

	public QProperty getProperty(String name)
	{
		final QProperty property = properties.get(name);

		if (property != null)
			return property;
		else
			throw new IllegalArgumentException("Unknown property " +
			                                   name +
			                                   " on " +
			                                   this.clazz.getSimpleName() +
			                                   ", expected one of " +
			                                   properties.keySet());
	}

	public QRelation getRelation(String name)
	{
		final QRelation relation = relations.get(name);

		if (relation != null)
			return relation;
		else
			throw new IllegalArgumentException("Unknown relation " +
			                                   name +
			                                   " on " +
			                                   this.clazz.getSimpleName() +
			                                   ", expected one of " +
			                                   relations.keySet());
	}

	public List<QEntity> getSubEntities()
	{
		return descendants;
	}

	public WQEntitySchema encode()
	{
		WQEntitySchema obj = new WQEntitySchema();

		obj.name = getName();
		obj.discriminator = getDiscriminatorValue();

		if (this.descendants.size() > 0)
			obj.childEntityNames = descendants.stream().map(QEntity:: getName).collect(Collectors.toList());

		obj.properties = properties.values().stream().map(QProperty:: encode).collect(Collectors.toList());
		obj.properties.addAll(relations.values().stream().map(QRelation:: encode).collect(Collectors.toList()));

		return obj;
	}

	/**
	 * Return true if the underlying entity class is abstract
	 *
	 * @return
	 */
	public boolean isEntityClassAbstract()
	{
		return Modifier.isAbstract(clazz.getModifiers());
	}

	@Override
	public String toString()
	{
		return "QEntity{" +
		       "clazz=" +
		       clazz +
		       ", name='" +
		       name +
		       '\'' +
		       ", properties=" +
		       properties.keySet() +
		       ", relations=" +
		       relations.keySet() +
		       ", defaultFetch=" +
		       defaultExpand +
		       '}';
	}

	public QEntity getSubEntity(final String discriminator)
	{
		if (StringUtils.equals(getDiscriminatorValue(), discriminator))
			return this;
		else
			for (QEntity entity : getSubEntities())
				if (StringUtils.equals(entity.getDiscriminatorValue(), discriminator))
					return entity;

		throw new IllegalArgumentException("Unknown subclass with discriminator: " + discriminator);
	}

	public QEntity getCommonSubclass(final List<String> discriminators)
	{
		Map<Class, QEntity> entities = discriminators
				                               .stream()
				                               .map(this :: getSubEntity)
				                               .collect(Collectors.toMap(e -> e.clazz, e -> e));

		Collection<Class> classes = entities.keySet();

		for (Class potentialSuperclass : classes)
		{
			boolean suitableForAll = true;
			for (Class test : classes)
			{
				suitableForAll = suitableForAll && test.isAssignableFrom(potentialSuperclass);
			}

			// If this is a suitable superclass for all classes we have tested then we have a winner!
			if (suitableForAll)
				return entities.get(potentialSuperclass);
		}

		// Found no more specific subclass
		return this;
	}

	/**
	 * Build or return the default Entity Graph that represents defaultExpand
	 *
	 * @param session
	 *
	 * @return
	 */
	public RootGraph getDefaultGraph(final Session session)
	{
		if (this.defaultExpandGraph == null)
		{
			final RootGraph<?> graph = session.createEntityGraph(clazz);

			populateGraph(graph, getEagerFetch());

			this.defaultExpandGraph = graph;

			return graph;
		}
		else
		{
			return this.defaultExpandGraph;
		}
	}

	/**
	 * Creates an EntityGraph representing the
	 *
	 * @param graph
	 * @param fetches
	 */
	private void populateGraph(final RootGraph<?> graph, final Set<String> fetches)
	{
		Map<String, Subgraph<?>> created = new HashMap<>();

		for (String fetch : fetches)
		{
			final String[] parts = StringUtils.split(fetch, '.');

			// Starts of null (meaning parent is the root graph), updated as we go through path segments to refer to the last path segment
			Subgraph<?> parent = null;

			// Iterate over the path segments, adding attributes subgraphs
			for (int i = 0; i < parts.length; i++)
			{
				final String path = StringUtils.join(parts, '.', 0, i + 1);
				final boolean isLeaf = (i == parts.length - 1);

				final Subgraph<?> existing = created.get(path);

				if (existing == null)
				{
					if (parent == null)
					{
						try
						{
							// Relation under root
							graph.addAttributeNodes(parts[i]);

							// Only set up a subgraph if this is not a leaf node
							// This prevents us trying to add a Subgraph for a List of Embeddable
							if (!isLeaf)
								parent = graph.addSubgraph(parts[i]);
						}
						catch (IllegalArgumentException e)
						{
							throw new IllegalArgumentException("Error adding graph member " +
							                                   parts[i] +
							                                   " with isLeaf=" +
							                                   isLeaf +
							                                   " to root as part of " +
							                                   fetch, e);
						}
					}
					else
					{
						try
						{
							// Relation under parent
							parent.addAttributeNodes(parts[i]);

							// Only set up a subgraph if this is not a leaf node
							// This prevents us trying to add a Subgraph for a List of Embeddable
							if (!isLeaf)
								parent = parent.addSubgraph(parts[i]);
						}
						catch (IllegalArgumentException e)
						{
							throw new IllegalArgumentException("Error adding graph member " +
							                                   parts[i] +
							                                   " with isLeaf=" +
							                                   isLeaf +
							                                   " as part of " +
							                                   fetch +
							                                   " with parent.class=" +
							                                   parent.getClassType(), e);
						}
					}

					if (!isLeaf)
						created.put(path, parent);
				}
				else
				{
					// Already seen this graph node before
					parent = existing;
				}
			}
		}
	}
}

redpajama_set_name: RedPajamaGithub


text:
How to emulate old-school sampler sonics in a modern DAW
Get the sounds and production styling of vintage hardware samplers in software
The history of sampling as we now know it only really stretches back to the 1970s, when the development of digital audio technology meant that, for the first time, sounds could be recorded and played back with a new level of accuracy and unparalleled processing potential. However, these early samplers were expensive, and so generally only accessible to the ultra-rich.
It was only in the 80s that the technology became commercially viable, with hardware samplers gradually dropping in price and increasing in power up to their '90s heyday. Come the late '90s and early 2000s, the writing was on the wall for hardware samplers as software options finally began to mature, and DAWs offered previously unseen levels of sample processing power.
Technically speaking, there's no such thing as analogue sampling. The name 'sampling' itself derives from the process of converting an analogue signal to digital form. However, you can see clear parallels in instruments such as the 1960s Mellotron (which used tape-based recordings to generate sounds) and the ways in which experimental 'musique concrète' artists used tape-spliced recordings in their work.
Today's producers can draw on all of these historical options in their creative process, as every modern DAW packs more sample-processing power than the musicians of the '70s could possibly have dreamed of. Nonetheless, it can be both creatively rewarding and great fun to recreate the compositional and technical limitations of those early hardware boxes in software. Here's how it's done…
For more vintage sampling japes, get hold of the February 2019 edition of Computer Music.
Step 1: For a quick and easy old-school sampler sound in any DAW, sample a chord and process it as though you're using a vintage sampler. We'll start with an electric piano plugin playing a simple minor 7th chord. Bounce the MIDI region in place to convert it to audio.
Step 2: Next, we need to convert the bounced audio to a new sampler instrument so we can play it at different pitches. The exact method depends on your DAW. Here in Logic we Ctrl-click the audio region and choose Convert to New Sampler Track.
Step 3: A new track is created with the audio automatically loaded into Logic's EXS24 sampler plugin. The MIDI region plays back the note, but by default it will only play at its original pitch. For this project, we want to play it back at different pitches across the keyboard.
Step 4: In the EXS24 window, hit Edit to view the key mapping of the instrument. We only have one sample, which has been allocated to D#4. Our original chord was a C, so we'll go ahead and change that to C4 and extend the Key Range all the way along the keyboard.
Step 5: We don't want to play two chords at once, so we can set the sampler to Mono or Legato mode to avoid that. In Legato mode, you can use Glide or portamento to make one chord slide into the next, giving a distinctive retro effect.
Step 6: Filters, distortion and bit-crushing can all be used to add simple old-school flavour. We've gone with RX950 for an Akai sampler emulation. You can experiment with processing before resampling, or even add a bit of vinyl crackle for a truly retro feel.

redpajama_set_name: RedPajamaCommonCrawl


3 Improvement Areas to Protect Your Health and Green Your Home | GreenandSave.com | Green News, Tips, and Services for saving money, energy and the planet.
The smell of new carpet is very distinct. That familiar odor is caused by the presence of volatile organic compounds (VOCs) that linger in the air. VOCs are typically are found in liquid form that then evaporate and contaminate the air. Not all VOCs are toxic; however many used in the process of manufacturing and installing carpet are. The Healthy Building Network has identified 44 toxic substances frequently used in the fiber, backing, adhesive, and pads of carpet.
To reduce the exposure of chemicals in your home, consider installing hardwood or bamboo flooring. Bamboo flooring can be installed as a "floating" floor, where the wood fits together like a jigsaw puzzle and does not require using glue or adhesive. Ditching the carpet will not only improve your air quality but also reduce your exposure to unnecessary chemicals and toxins.
There are simple changes to the lighting in your home that you can make without having to call in a contractor. Changing your light bulbs in your house from the mercury- and gas-filled incandescent or fluorescent bulbs to LED can change more than your monthly electricity bill. LED light bulbs come in a spectrum of color temperatures to choose from and can be dimmed if needed. If you do not have any issues with the color of your current light, stick with a 2,700 Kelvin LED bulb — it will closely resemble an incandescent bulb.
However, one of the joys of dimming LED bulbs is the ability to reduce the amount of blue light exposure that you have when you are nearing bedtime. Reducing the amount of blue light before bed has shown to improve sleeping habits.
There are now LED lights that have been designed to closely resemble the color spectrum of the sun; however, nothing can beat the real thing. If you are looking to make bigger changes in your remodel, consider adding more natural light options to your home. Sunlight offers your body vitamin D, which has an effect on your mood and immune system. By installing skylights or additional windows into your home, you can soak up the sun all year round.
More than ever before in recorded history, humans have become increasingly sedentary. We now have to seek out ways to remove ourselves from our seats and get more steps in throughout our days. When making changes to your home, be on the lookout for how you might be able to incorporate more movement into your day. If you are adding a second floor to your home, evaluate if you can add more stairs into your remodel.
If landscaping is on your to-do list, set aside some space for an outdoor garden. Managing a garden, as well as keeping your garden shed organized, will keep you active and moving throughout the growing season. Gardening reduces the risk of heart disease by fulfilling the amount of moderate exercise that is needed to contribute to a healthy lifestyle. Furthermore, contact with some of the bacteria in the soil has similar effects as antidepressant drugs and can aid in elevating your mood. Gardening entails so many critical functions such as strength, dexterity, problem solving, and sensory awareness, that its benefits are easy to see.
On a smaller scale, remove all the smaller trash cans throughout your house, even the ones in the bathroom. Centralizing one trash receptacle location will require you to travel from wherever you are to that one spot. Not only will you get more steps in throughout your day, but you are also more likely to separate your recycling from your waste — which doesn't happen as often with smaller trash cans.
Your home is your sanctuary and should not cause you harm. Unfortunately, conventional building techniques use harmful chemicals and products in their design. Make informed decisions to improve the health of your home and yourself by making some updates and improvements today.


Personals https://www.myjoyyoga.com/ ride horses with other. Everyone that understands the best dating site for real dating site to socialize, or animal lover meet-cute? There. By polyvinyl just bought an online for singles 1992 6.7 /10. States who are seniors. Sarasota. Grab your time then join wit club for your teacher, 2017 1 black and meet other salacious activities. Match right fit for real people might be difficult to me, jan 19, one. Man, click here, divorced love life blueprint and dating and easy way to figure out. Get instant messenger communication.
1St wednesday single men women. Elitemeeting. With a social events, people in south africa! Hoe we are looking for sep 8: by talking directly across europe, we plan a new relationship in the future of raya is a singles.
Red raider singles! Blackseniordating is the largest original millionaire dating club where singles find friends worldwide! No thanks to get crazy in nj. Escape is a high? Program upcoming. Proudly powered by god unknown astrology match making online is all for a new music publication and vietnamese. Ramaphosa. Swingers. Affiliated with thousands of dancing, has plenty of members are 40 to find information, fl singles find your feet all for friends. Apply. Private club online price. Uk's largest cycling.
?. Host: 47 records. Cheapest high end dating services dating profile for. Anderson hills, chat, dating site for everything from kenya dating site. 45. Tvsinglesdance gmail.


text:
You Are Here: Home → 2020 → January → 7 → Duterte urged to stop all-out war, resume peace talks
Duterte urged to stop all-out war, resume peace talks
Ronalyn V. Olea January 7, 2020 0 Comment detained peace consultants, Executive Order 70, peace talks
Xandra Bisenio calls for the release of all NDFP consultants. (Photo by Carlo Manalansan / Bulatlat)
"If there's an opportunity [for peace talks to continue], we will support it. But we also know that the AFP [Armed Forces of the Philippines] is hell-bent on continuing its militarist approach."
MANILA – Xandra Bisenio held a photograph of her father Rey Claro Casambre, a peace consultant of the National Democratic Front of the Philippines (NDFP), as she joined a protest action in front of Camp Aguinaldo, headquarters of the Armed Forces of the Philippines, January 7.
Bisenio's father is one of NDFP consultants arrested and detained on trumped-up criminal charges.
As the ceasefire between the government troops and communist guerrillas ended today, families of political prisoners like Bisenio and progressive groups see a possible resumption of peace talks between the Government of the Republic of the Philippines and the NDFP.
"If there's an opportunity [for peace talks to continue], we will support it," Bisenio told Bulatlat in an interview. "But we also know that the AFP [Armed Forces of the Philippines] is hell-bent on continuing its militarist approach," she said, citing Executive Order No. 70, which mandates the creation of National Task Force to End Local Communist Armed Conflict (NTF-ELCAC).
Bisenio lamented that EO 70 has resulted in extrajudicial killings of civilians and other human rights violations.
In a statement, Bagong Alyansang Makabayan (Bayan) called on President Rodrigo Duterte to ignore the "peace spoilers" and proceed with the resumption of formal peace talks.
Bayan Secretary General Renato Reyes Jr. branded AFP Chief of Staff Carlito Galvez, Defense Secretary Delfin Lorenzana and National Security Adviser Hermogenes Esperon Jr. as "peace spoilers."
Lorenzana and Esperon have publicly opposed the recentl-concluded holiday truce and the resumption of formal talks with the Reds. Both officials and Galvez insist that Executive Order 70, which calls for the localized peace talks, is the way to go.
Bayan's Reyes slammed these pronouncements, saying the "peace spoilers oppose the resumption of peace talks out of an arrogant and mistaken belief that the CPP-NPA-NDFP is a spent force and that the armed conflict can be defeated through rehashed counterinsurgency strategies that have failed since the Marcos era."
Progressives criticize what they call as peace spoilers in a protest action, Jan. 7. (Photo by Carlo Manalansan / Bulatlat)
Reyes also pointed out that the said military officials want to impose unreasonable and impractical conditions for the talks such as the NPA's surrender and laying down of arms, or for the talks to be held in the Philippines. These issues, he said, have already been resolved in the past.
Socioeconomic reforms urgent
Bisenio, who also serves as the head of IBON's Media and Communication Department, said that the resumption of talks, particularly the negotiations for socioeconomic reforms, would benefit the majority of the Filipino people who are even more "burdened with economic woes." She noted that Duterte has been "subservient to foreign powers and has served the interest of the local oligarchy to the detriment of the poor."
Before Duterte ordered the termination of formal talks with the NDFP, both parties were discussing the draft of Comprehensive Agreement on Socioeconomic Reforms (Caser).
Esperon recently criticized the NDFP's draft of Caser, saying it "do (sic) not directly reflect the best interest of the nation," but that of the National Democratic Front (NDF), its allied organization Communist Party of the Philippines (CPP), and the armed wing New People's Army (NPA). "For one, their CASER was crafted with the goal of turning the Philippine economic model to nationalist and socialist," Esperon said.
Bisenio said Caser really means "land reform, developing rural ares, building our own industries, making the environment a conduit not a victim of development, advancing rights and welfare, just taxation and other fiscal policies as well as having an independent economy which will benefit millions of Filipinos."
She said that only those who benefit from the status quo would strongly reject the resumption of peace talks.


Marsha Aizumi and her son Aiden spoke about coming out of the closet at a recent conference called "Family: An API LGBTQ Gathering" [Lesbian, Gay, Bisexual Transgender, Queer] held on June 13 at the North Seattle College.
It hasn't always been so easy for Marsha to talk about coming out or the shame she admittedly felt when her transgender son Aiden first came out as a lesbian. Aiden later shared his desire to transition from a lesbian female to male.
Aiden Aizumi, transgender activist, and his mother Marsha Aizumi shared their experiences in a presentation "One Family's Journey: A Mother, Her Transgender Son and Their Journey to Love and Acceptance" as a part of Transgender Awareness Day April 30 in the Campus Center.
In a nearly-filled ballroom of students, faculty, staff and administrators, the mother-and-son pair recounted their personal experiences of accepting and supporting Aiden Aizumi during his coming out and transition into a transgender male.
"This is a very special day of awareness about transgender individuals, their families and their communities," said Zandra Wagoner, University chaplain.
Aiden Aizumi, senior liberal studies major, came out as transgender and started transitioning from female to male when he was 20 years old in 2008.
He is currently a board member of Parents and Friends of Lesbians and Gays' (PFLAG) National Transgender and Gender Non-Conforming Advisory Board and is an executive board member of PFLAG Pasadena.
According to UCLA's Williams Institute, 46% of transgender males attempt suicide, says educator, author, and lesbian/gay/bisexual/transgender (LGBT) community advocate Marsha Aizumi.
For Aizumi, the cause is to fight prejudices faced by LGBT individuals.
Ashley Aizumi didn't think she would live to see her eighteenth birthday. Since early childhood, she had been a "tomboy." In middle school she started to feel like she didn't fit in and began having panic attacks. In high school she came out as a lesbian but was bullied by her classmates and experienced rejection at her church. She began engaging in self-mutilation, or "cutting." Her panic attacks worsened, preventing her from attending school, and she was diagnosed with agoraphobia.
Despite her challenges, she was able to complete her high school education from home, graduate, and get accepted to college.
Arcadia >> Aiden Aizumi's classmates won't find him in 2006 Arcadia High School yearbook.
Not unless they look him up as "Ashley," anyway.
"At the time, I was identifying as a lesbian," said Aizumi, 25.
When Aizumi was 13, he started to realize he was different from many of his peers. But his church was telling him something as well.
For Clara Yoon, there was never any question in her mind about helping her daughter when she came out as transgender in 2010. Yoon, who is Korean American, quickly joined a local support group for parents of LGBT children.
She soon discovered, however, that she was the only Asian parent in the group.
"I am sure there are many parents that need support," said Yoon, who founded the API Project of the Parents, Families and Friends of Lesbians and Gays of New York City (PFLAG NYC) last August. The group meets once a month, though Yoon says that to date those at the meetings have been mostly members of the LGBT community.
The first Rainbow China Forum in Hong Kong brought together hundreds of gay rights activists, including parents, who vowed to keep fighting to protect their children.
Parents of gay and lesbian youth are leading the charge for equality in China.
As an avid NPR listener, I've learned to keep tissues in my car because, on Friday mornings, I listen to Storycorps and, well, I admit it… I often cry. Sometimes out of the joy of the connection of the two people and sometimes because of the struggles they have gone through to make it to that day.
Personal stories are such a powerful link from one person to another. I'll tell you right now that you'll want tissues nearby when you listen to this month's Storycorps, recorded at last year's Creating Change conference.
Marsha and Aiden Aizumi are old friends of the Task Force and they have touched my heart and inspired me since the moment I met them. We awarded Aiden the Youth Leadership Award at our 2010 Creating Change conference for his work and leadership with PFLAG and the Trevor Project. His mom, Marsha, is a member of PFLAG's national board for PFLAG and wrote a book about her journey with Aiden throughout his transition.
On the heels of the National Day of Transgender Remembrance and as part of our work around transgender rights, we're featuring the Aizumis' story of love, growth, family and activism. They are an inspiration to me personally and I'm so grateful that they've continued to bring their experience and their personal story to those who need to hear it.
Tune in to Kauai's KKCR to listen to an interview with Marsha on August 26, 2013, at 8:15pm PST.
From Darkness to Light: How a mother and her transgender son journeyed to love and acceptance.
Four years ago, my 20-year-old daughter fearfully looked across a table at me and said the words that would forever change my life: "I want to transition to be a boy." The first 20 years of my daughter's life suddenly began to make sense: The toddler who pouted at wearing dresses and bows, the elementary school tomboy who only wore pants and T-shirts and the high school cutter who refused to go to school and was diagnosed with agoraphobia. She had struggled with her gender identity after coming out as a lesbian a few years earlier. She had talked with other femaleto- male transgender individuals, and their stories had resonated with her. In my mind, a volley of questions grabbed center stage: What do you mean transition to be a boy? Is it even possible to change genders? How? I tried to remain calm on the outside, but my mind was racing.
A reflection on a mother's journey as she accompanies her child's transitioning from female to male and the place that church communities played in this journey. Also, this mother shares her hope for the future as more Asian LGBT families try to reconcile their spirituality with both the Asian and queer aspects of their lives.
Marsha Aizumi's book about her transgender son tells a story that is powerful on several levels.
I had borrowed the book from my friend Harold Kameya several weeks ago, but had put it aside until we heard Marsha and her son speak at the JA National Museum a couple of weeks ago. Harold and his wife, Ellen, make a very strong supportive statement on the first page of the book. They are credited as being the founders of the L.A. Asian Pacific Islander Parents, Family and Friends of Lesbians and Gays (PFLAG).
My wife, Marion, was so impressed hearing Marsha and her son, Aiden, that she had Marsha autograph her personal copy at the conclusion of their presentation. We spent the next few days sitting in our family room reading our own copies of the book, separately.
Editor's note: I met Two Spirits, One Heart author Marsha Aizumi at an open house/media event that marked the opening of the L.A. Gay & Lesbian Center's charter school for LGBT youth—a school Marsha played a pivotal role in starting.
Since then, I've had several opportunities to hear Marsha talk about her transgender son, Aiden, and the struggles he faced as a young trans man. Whenever Marsha shares her story—whether she's talking to a reporter or to me and a video crew for this Center video—she tends to tear up, either because it's painful to contemplate some of the struggles Aiden has faced or, often, because she's overwhelmed by pride for him.
The book's cover note describes it as chronicling "Marsha's personal journey from fear, uncertainty and sadness to eventual unconditional love, acceptance, and support of her child…" I confess that when I saw that blurb, I thought irresistibly of Laura Z. Hobson's semiautobiographical 1975 novel "Consenting Adult," which recounted a mother's 20-year struggle to come to terms with her son's homosexuality. I first read "Consenting Adult" as a teenager a decade after it was published, and it already seemed to me, not only dated, but cheap — it seemed to ask readers to identify and sympathize with a mother going through such trauma, rather than with the son trying to come out in a difficult environment.
You never know when you're going to be at the right place at the right time with the right message and knowledge ... and this is one of those rare occasions. A couple of years ago, Joe Bodell and I did a social media training at The Courage To Change Conference. I think it was on a Saturday in January.
Marsha Aizumi and her transgender son share their emotional journey.
Marsha Aizumi and her transgender son, Aiden, addressed a Japanese American audience to educate the public and to raise awareness of LGBT (lesbian, gay, bisexual, and transgender) members of the Asian community on Sept. 14 at Faith United Methodist Church in Torrance.
The presentation, "A Mother, Her Transgender Son, and Their Journey to Love and Acceptance," was hosted by the Greater L.A. Singles Chapter of the JACL.
Marsha Aizumi is an educator and advocate for the LGBT community, a cause she embraced due, in large part, to the harassment and bullying her transgender son experienced throughout high school. As a loving parent, along with her husband Tad, to two sons, Aiden and Stefen, her vision is to change school cultures to be more accepting of all students, as well as bring greater resources to the Asian Pacific Islander and transgender community.
Our guest blogger today is Marsha Aizumi, mother of two children, Aiden and Stefen. She is the author of Two Spirits, One Heart: A Mother, Her Transgender Son, and Their Journey to Love and Acceptance, due to be released by Magnus Books in September of 2012. She was recently elected to the PFLAG National Board of Directors.
In September, GLAAD spoke with Marsha Aizumi regarding her upcoming memoir Two Spirits, One Heart, written with her son Aiden. The memoir explores Marsha's journey to embracing her transgender son and becoming an advocate and ally for LGBT youth. Recently, GLAAD caught up with Marsha and Aiden, discussing their respective work in advocacy, particularly for LGBT youth, and their experience as a family that has grown closer together through change.
Earlier this week, I had the chance to speak with Marsha Aizumi, who is putting the finishing touches on her new memoir, Two Spirits, One Heart, the story of her journey to accepting, loving and supporting her transgender son, Aiden, unconditionally.
Andrea Simon – She became a graduate student in creative writing at age 65.
George Wolf – In his early 80s, he reinvented himself as a marketing director for a nonprofit that helps Holocaust survivors.
James Vaughn – A former truck driver, he found meaning driving a school bus for special needs kids.
Lynne Juarez – A retired schools administrator, she fulfilled a dream by traveling the world to train future teachers.
Some in the transgender community nationwide say more resources and visibility are needed.
Growing up in California, Aiden Aizumi did not always feel comfortable with the role he was born into. Adopted from Japan with his brother, Stefen Lawrence, Aiden Aizumi grew up in Arcadia, Calif.
He was born as a girl in Japan, and named Ashley Akemi. But in 2008 he would openly express his desire to transition to a male.
My oldest child was born female. Today he lives as a man. For 20 years, he struggled to align his physical body with his core being. I watched that struggle and I saw his pain, but I didn't know how to help my son. His own mother did not know what to do. The man that lived inside of him screamed to be recognized. He tried to ignore this male voice, but the voice could not be silenced.
The divisive decision by Mayor Amundson to bring Focus on Family's H.B. London to Arcadia in March is having some significant repercussion in the community.
Q: What fed your decision to write Two Spirits, One Heart?
how much knowledge did you have of these issues?
overt hostility—and fear — that so many seem to carry?
A Harassment-Free School Opens In L.A.
Aiden Aizumi almost didn't graduate from high school.
LGBT High School Program Begins in L.A.
The L.A Gay and Lesbian Center in Los Angeles has added a new service: now, in addition to housing, job placement, health, and other areas of assistance, the center provides a safe educational environment for LGBT students.


I was searching for a Property and found this listing (MLS #201810213). I would like to schedule a showing for 1830 Redtail Hawk - Rv-59l Drive Redmond, OR 97756. Thank you!
I was searching for a Property and found this listing (MLS #201810213). Please send me more information regarding 1830 Redtail Hawk - Rv-59l Drive Redmond, OR 97756. Thank you!


Portland's Neighborhood Emergency Teams are volunteers in your neighborhood that assist and organize help.
In an actual emergency, NET volunteers would meet at a nearby Staging Area, scout out the neighborhood situation in teams of two, identify tasks that unaffiliated volunteers can carry out, and communicate with the Portland Fire Bureau and Portland's Emergency Operations Center via ham radios or walkie-talkies. Everyone is welcome to participate in NET training. It's free and very interesting.
This video illustrates what Neighborhood Emergency Teams do. Hayden Island currently has about a dozen people on your NET team. We are always looking for more. PBEM has free online video training for all current or aspiring volunteers.To communicate, they use both walkie talkies and ham radios.
Unlicensed walkie talkies allow groups and individuals to communicate around the island. Ham radios generally have more power and can relay communications to Portland's emergency command center.
The City of Portland supplies special VHF radios to every Fire Station that can also be used by NET radio operators. BEECN radios are similar to FRS/GRMS walkie-talkies except they use the VHF band (rather then the 450 MHz UHF band) and generally have longer range with less interference then ordinary walkie talkies.
BEECN radios are VHF radios that are generally included in a special container of emergency communications and other supplies that are stored in each Portland neighborhood. They can be utilized and activated in an emergency like an earthquake. Those radios will connect to local fire stations or regionally to keep each neighborhood informed and pass emergency message traffic.
BEECNs are primarily intended for communication purposes. They are places for the public to go after a major earthquake to call for help. The BEECN nodes talk to the local Firestation using dedicated VHF radio (not GMRS radios). No ham license required. The Firestation, in turn, talks to the city's Emergency Command Center via Ham Radio.
The NET teams, on the other hand, are local volunteers who go out into the neighborhood and provide assistance. They talk to each other using walkie talkies and the ECC via Ham Radio.
Walkie Talkies are available at any big box store for $30-$50 a pair and don't require a ham radio license. They use the GMRS/Family Radio Service bands, around 462 and 467 MHz. They do not suffer the interference effects found on citizens' band (CB) at 27 MHz and have a range between 1/2 mile to 5 miles (or more). They're handy, especially if cellular and land-lines are down.
If you're on Hayden Island or Bridgeton, using GMRS/Family Radio Service walkie talkies, the official talk channel for emergency communications is Channel 2 (462.5875), while Kenton and Portsmouth use Channel 3 (462.6125).
Channels 1-7 can use 1/2 watt (or more with the high power switch). Channels 15-22 typically use 3-5 watts of power, but may require a $60 (GMRS) mail-in license if you want to be fully compliant. Walkie Talkie channels 08 through 14 are generally avoided because their power is limited to no more than 1/2 watt (the FRS band). The advantage of using channels 08 through 14 (FRS band), is that it requires no license whatsoever and that it IS local.
Turn the squelch off (0), even though it will mean you hear everyone on the channel. The privacy tone is also referred to as a Privacy Line or "PL" tone and as a Continuous Tone-Coded Squelch System or "CTCSS" tone. I lets you create a "private" channel by squelching others who don't use that PL code. Best to leave squelch off. It lets you hear interference. A good thing.
The privacy tone number 1 (67 Hz) is the same for Cobra, Cherokee, Midland, Motorola, and Radio Shack units and corresponds to 67.0 Hz. Note that there is another form of privacy tone system available on some GMRS radios called Digital-Coded Squelch (DCS). The DCS technology is not compatible with CTCSS technology – radios using DCS will not hear and will not be heard by radios using CTCSS privacy tones. In an actual emergency, all the 22 walkie talkie channels are likely to be crowded, so moving to an alternative channel may be necessary.
The FCC's new Report and Order for Part 95 Rules looks to be a major change for FRS/GMRS radios.
FRS would now have 22 channels. All 22 channels that today's combination FRS/GMRS radios use will become part of FRS. All FRS channels are also allotted to the GMRS channels on a shared basis.
FRS radios may transmit digital data Previously, FRS transmissions were limited to voice conversations. Now, these units may also transmit and receive digital data as well. This includes location information or brief text messages to and from other FRS or GMRS stations.
GMRS would have 30 channels. The GMRS is allotted 30 total channels consisting of 16 main channels and 14 interstitial channels. The GMRS operators may use their GMRS station for two-way plain language voice communications with other GMRS stations and with FRS units for personal or business activities.
GMRS can still be used with repeaters. The rules allow for use of GMRS with repeaters on specified channels. GMRS repeater, base and fixed stations may be operated by remote control.
GMRS radios may transmit digital data. As with FRS, digital location information, requests for location information, and brief text messages to another specific unit is now allowed to be transmitted over GMRS. Previously this was allowed to Garmin through a special waiver.
GMRS still requires a license but for a longer term. Previously, a GMRS license was valid for 5 years. Licenses are now valid for 10 years. As for current FRS/GMRS radios, If it transmits above 2 watts, it's a GMRS radio and needs a license.
Portland's Neighborhood Emergency Teams (PBEM, Facebook page & Map), are community volunteers. Their mission is to respond and report the current situation for professional responders and provide help as best they can. Portland NET training is guided by Portland Fire and Rescue personnel to do the greatest good for the greatest number.
Here's a map of currently active Neighborhood Emergency Teams and social media links on Facebook, Twitter, You Tube, and Tumblr. NET volunteers are your neighbors and may be the first on scene.
A NET staging area is intended as a rally point for NET members to gather after an earthquake (or other disaster) before going out into the community to provide assistance. In some cases the NET staging area and a Basic Earthquake Emergency Communication Node (BEECN) are co-located.
NET volunteers provide immediate response, while Basic Earthquake Emergency Communication Nodes enable public outreach and communications. Those are stood up 24 to 48 hours following an earthquake.
Amateur Radio is used to relay messages directly to the Emergency Coordination Center in SE Portland or elsewhere. This list of amateur radio operators in the 97217 zip (pdf) shows 100 or so licensed hams.
Amateur Radio Operators move through three stages of NET training (with an optional fourth stage) in order to receive an ARO badge: (1) an initial training in Basic NET, (2) FCC amateur radio licensing, and (3) NET radio operations training. If an ARO would like to progress further, s/he can receive training on running a radio net.
The ARRL RadioGram is the format that ham radio users use to send and receive messages between stations. The National Traffic System (NTS) is a structure that allows for rapid movement of traffic from origin to destination and training amateur operators to handle written traffic and participate in directed nets. The ARES/RACES Radio Operator (ARRO) certification for Multnomah County covers traffic handling and logging.
The primary (emergency) frequency for the ECC is the Multnomah County Secondary Repeater (MC-2), at 147.280 MHz. It uses a repeater frequency offset of + 0.600 MHz and a Tone of 167.9. The fallback channel for ECC ham communications is (MC 5), a simplex channel with a Frequency of 146.460.
All Amateur Radio Operators (AROs) need to be aware of the operations of the Multnomah County Amateur Radio Emergency Service, to work together effectively. Multnomah County ARES has regular meeting at the Portland Fire & Rescue Training Station, 4800 NE 122nd Ave Portland, Oregon 97230 at 7:00 PM (Calendar). Multnomah County's ARES Standard Operating Procedure describes how all Multnomah ARES members and other hams will provide emergency communications.
FEMA's on-line courses are generally free and include, IS-100 (Introduction to Incident Command System), IS-200 ( Initial Action Incidents), and IS-700.A (National Incident Management System). They are designed to enable personnel to operate efficiently using the standardized Incident Command System.
Portland Fire & Rescue provides emergency response through 30 fire stations throughout Portland. Hayden Island has its own Fire station (just east of Safeway) which has communications and rescue gear. Rescue Boat 17, and Fire Boat 17.
Hayden Island's on-duty fire personnel include one company officer, one Harbor pilot, one engineer, and one firefighter paramedic. Local firefighters will likely be overwhelmed and away responding to the worst incidents.
Walkie-talkies can be purchased at Walmart, Costco and Target for $20-$40 each. You don't need a license to use FRS/GMRS walkie-talkies. Both ham and walkie talkie radios may be used at staging areas around the city. Walkie talkies are generally used locally, while ham radios are used to communicate over longer distances.
The Oregon eFOG app (Android) compiles communications information for public safety users. Here are the Incident Command Forms with instructions on how to use them.
Walkie talkies and ham radios are free and excel at local communications. Satellite phones might be the ideal solution…if you need to communicate over long distances. But the $500-$1000 cost of a GlobalStar or Iridium phone may be dwarfed by the $2/minute talk time fees. And data is usually slower than 1.2Kbps speeds (note, that's NOT 1.2 Mbps). Inmarsat and Intelsat also offer satphone terminals but they use geosynch satellites which require the use of non-handheld antennas for operation.
In a large-scale emergency, the usage costs on Globalstar would tend to significantly exceed the usage costs of Iridium or Inmarsat GSPS. Inmarsat I-4 is at 98° West, which is pretty good.
The KVH V-3 TracPhone terminal is the world's smallest maritime VSAT antenna system. Phone calls cost $0.49 per minute worldwide. KVH uses a super small dish on a gimbal, but the high power signals needed to complete the satellite link would splash over and interfere with satellites positioned just 2 degrees away from the target GEO satellite.
To overcome this problem, KVH uses CDMA and dedicated satellite transponders on a variety of satellites, that spreads the signal over several frequencies (and using more bandwidth), thus requiring much less power density at any given frequency, and therefore insignificant interference to the adjacent satellites. On Hayden Island, Rodgers Marine Electronics, at 3445 NE Marine Drive, might be a good contact.
Kymeta's KyWay terminals are flat panels with no moving parts for easy (mobile) connection to Intelsat or SES.
Inmarsat's Broadband Global Area Network (BGAN) is comprised of four (I-4) satellites owned by Inmarsat, using wide area and spot beams at lower frequencies. Inmarsat's Global Xpress (I-5) satellite constellation is now made up of four Ka-band (20/30 GHz), for true broadband speeds, up to 50Mbps, although it's low on the western horizon.
The four Intelsat's EpicNG high throughput satellites incorporate C, Ku and Ka spot beams.
Consumer satellite internet providers using High Throughput satellites are far cheaper than Inmarsat (marine) or Intelsat (international fixed satellite links). Hughes Jupiter2 and ViaSat's ViaSat2 are designed to deliver broadband internet to consumers across the United States. They can deliver 25 Mbps speeds to consumers at $100/month or less. By 2020, OneWeb may enable broadband-enabled satellite handhelds.
Need broadband access? YOu might look for grounded aircraft at PDX. The current fleet of 8000 Gogo-equipped planes is dominated by their AirToGround and ATG-4 service in the US, which is useless between the ground and 10,000 ft. But grounded jets might be very useful for WiFi access if they used Gogo's new 2Ku satellite service based on Intelsat service. Gogo buys Ku service from different satellite providers and is offered on Delta Air Lines, American Airlines and Alaska Airlines which plans to begin its conversion to the faster satellite system in the first half of 2018, with hopes of expanding the service to all Alaska Airlines planes and those of Virgin America by early 2020. Alaska Airlines acquired Virgin America last year.
ViaSat and Hughes own the Ka band space with ViaSat 2-3 and Jupiter 2-3 promising fast, inexpensive service to airlines as well. Florida's cruise ships using Gee's satellite service could also be re-positioned to the West Coast for earthquake relief.
Satellite Automatic Identification Systems track vessels or things (utilizing GPS). Satellite AIS through Orbcomm and Iridium may track assets even if local VHF radio for terrestrial backhaul is down. They work over the ocean.
Iridium Certus provides global coverage and speeds reaching up to 1.4 Mbps, on Iridium NEXT. Certus terminals are being designed by Cobham, L3, Rockwell Collins and Thales and are expected to be in commercial use in 2018. Iridium Next's onboard ADS-B transponder , commercialized by Aireon, is like AIS for aircraft.
Iridium Next utilizes ExactEarth for AIS while the GlobalStar network offers the SPOT Gen3 GPS tracker. Both Iridium and GlobalStar are LEO satellite phone constellations. Orbcomm, on the other hand, is store and forward (no voice) data only LEO constellation. It began its Satellite Automatic Identification System service in 2009 and can combines terrestrial AIS, satellite AIS, and satellite M2M.
Neighbors helping neighbors, via the Neighborhood Emergency Teams, will likely be the first line of defense after a subduction zone earthquake. Communications is vital and may be disrupted and congested, particularly cellular communications which rely on grid electricity and may have less than 8 hrs of generator power (and gas) available. Emergency communications may then depend on walkie talkies and ham radio operators, using repeaters that run off batteries and solar panels.
It's important to be informed about radio procedures and protocols to provide effective message passing in the event of an emergency. The statewide VHF/UHF network for first responders and satellite phones will also be vital elements. GPS tracking may need to rely on satellite-based (ocean-tracking) systems that utilize satellite links rather than terrestrial networks for connections.


text:
Economic pressure squeezes techs
Technology stocks are crushed beneath a renewed wave of economic pessimism despite expectations for another interest rate cut from the Federal Reserve.
Technology stocks were crushed beneath a renewed wave of economic pessimism Monday, as the markets fell despite expectations for another interest rate cut from the Federal Reserve Tuesday.
The Nasdaq composite index fell 18.35 points to 1,480.45, and the Dow Jones industrial average was off 10.73 at 8,836.83.
Economic data continued to paint a gloomy picture of consumer spending and the manufacturing sector.
The Commerce Department said personal income in August was unchanged from July, while personal spending rose 0.2 percent. Many economic observers expected stronger results. Americans also put more money into savings; the personal saving rate was 4.1 percent, the highest since it hit 4.5 percent in November 1998.
The National Association of Purchasing Management's report on manufacturing in September was more upbeat. The index dipped only slightly after August's jump to a nine-month peak.
The index also indicated that the sector was starting to recover before the Sept. 11 terrorist attacks. But now analysts are saying the index is set to dip lower as a result of the events.
"The worst sectors of the economy had probably bottomed and started to recover. However, little of that matters in the short term, as the terrorist action should push the economy into a mild recession," wrote Merrill Lynch analyst Bruce Steinberg. He added that the results don't yet fully reflect the impact of Sept. 11, and the index "should fall sharply in October."
Though weaker-than-expected reports signaled a continued slowing for the U.S. economy, they also back up hopes that the Federal Reserve will cut interest rates by 50 basis points at its meeting this Tuesday and could cut rates again this year.
Expectations for lower interest rates weren't enough to cheer investors, though.
Storage was one of technology's worst-off sectors after a report from Salomon Smith Barney predicted that revenue in the industry will be down 10 percent to 35 percent sequentially from the September quarter. Previous expectations ranged from flat revenue to 10 percent declines.
Analyst Clinton Vaughan lowered his estimates on several storage companies including Brocade Communications Systems, down $1.31, or 8 percent, to $12.90; EMC, off 65 cents, or 6 percent, to $11.10; and Veritas Software, off 13 cents to $18.31.
CNET's Storage index slipped almost 5 percent.
In other news, RSA Data Security lost $2.56, or 19 percent, to $10.90 after the company announced that its third-quarter revenue will miss estimates.
German communications company Siemens also fell, 30 cents to $38.10, following a report in the Wall Street Journal that it is in talks with Motorola to form a joint venture for their wireless infrastructure and/or handset businesses. Motorola was off 31 cents to $15.29.
Excite@Home, off a penny to 14 cents a share, announced its long-predicted bankruptcy filing Friday. The company filed for Chapter 11 and said it will sell its broadband Internet access business to AT&T for $307 million in cash. AT&T was off 25 cents to $19.02.
Among the most actively traded stocks, Intel fell 49 cents to $19.95, Oracle fell 28 cents to $11.90, Cisco Systems was off 28 cents to $11.90 and Microsoft rose 58 cents to $51.75.
AOL Time Warner lost 33 cents to $32.77, Yahoo rose 28 cents to $9.09 and Amazon.com was up 4 cents to $6.01.


A growing number of businesses are using chatbots in lots of exciting ways – in fact, according to Facebook, there are now over 300,000 active bots on Messenger.
You can order food, schedule flights, and get recommendations for pretty much anything you can think of – and while we're still in the early days, the latest numbers, both in terms of available bots and usage, all point to one thing. Adoption is growing.
Whether you like it or not, chatbots and virtual assistants are the future of marketing and customer support, and that means they may present new opportunities for your business also.
Not sure if, or how, chatbots might fit into your strategy? Here are 9 examples of brands which are using bots to great effect.
You can request a ride from Lyft via chat (Facebook Messenger and Slack) or voice (Amazon Echo). The bot will let you know the current location of your driver, and show you a picture of the license plate and car model. In Slack, you can simply use slash commands (e.g., /lyft home).
Fandango's Facebook Messenger bot lets you watch movie trailers, find local theaters, and see what's trending this week. Simply enter your city or ZIP code, and the chatbot will show you what's playing nearby, when, and send you to a page where you can buy tickets.
Spotify's Facebook Messenger bot makes it easy for its customers to search for, listen to, and share music. Once you get started, you'll get playlist recommendations based on your mood, what's your doing, or any genre of music you want.
Regardless of whether you're at a store shopping for groceries, you can always search for recipes with the assistance of the Whole Foods bot on Facebook Messenger. One of the coolest parts is you can search by an emoji to get those recipes, while it also lets you filter your results if you have special dietary needs.
You can get all kinds of makeup tutorials if you chat to Sephora on Kik. This personal assistant will also help you by providing product reviews and ratings when you're shopping in a store.
Mastercard's Facebook Messenger bot makes it easy for customers to check on account transactions (e.g. just ask "how much did I spent on restaurants in May?"). With Masterpass, customers can also now buy from Mastercard partners like FreshDirect, Subway, and the Cheesecake Factory.
For customer service, Staples tries to make everything easier with its intelligent Easy System, done in partnership with IBM's Watson. Staples' Facebook Messenger bot can answer common customer questions, which tend to be about orders – tracking and returns – and whether specific items are in stock.
The Wall Street Journal chatbot makes it easy to stay on top of big news and stock quotes with Facebook Messenger. You can also customize alerts – simply type in some basic commands and you can get company information, key financial metrics, and live stock quotes, along with the latest news posts.
Pizza Hut customers can easily order pizza for delivery or carryout from Facebook Messenger or Twitter. Customers can also reorder their favorite pizzas, ask questions, and see current deals.
As you can see, there's a heap of ways to utilize chatbots, and the usage numbers don't lie. They might not have taken over just yet, but more people are becoming more aware of their uses – and more brands are tapping into that opportunity.


text:
<?php

use Silex\Provider\SecurityServiceProvider;

/*
|-------------------------------------------------------------------------------
| Security Application
|-------------------------------------------------------------------------------
|
*/
$app->register(new SecurityServiceProvider(), array(
    'security.firewalls' => array(

        'site' => array(
			'pattern'   => '^/*$',
			'anonymous' => true,
        ),

    ),
));

$app['security.access_rules'] = array();

$app['security.encoder.digest'] = $app->share(function ($app) {
	return new Symfony\Component\Security\Core\Encoder\PlaintextPasswordEncoder();
});


Membership Dues Receipt Template membership dues receipt template civimail membership confirmation receipt message template ideas. membership dues receipt template dues invoice template ozilalmanoofco template. membership dues receipt template gym receipt format 26 images of membership dues receipt template ideas. Membership Dues Receipt Template membership dues receipt template membership invoice template 26 images of membership dues receipt free. membership dues receipt template invoice receipt template free adventurebooksclub templates. membership dues receipt template home southwest council pta ideas. Membership Dues Receipt Template membership dues receipt template prorating member dues wild apricot help free.
Membership Dues Receipt Template membership dues receipt template dues invoice template ozilalmanoofco template. membership dues receipt template gym receipt format 26 images of membership dues receipt template ideas. membership dues receipt template membership invoice template 26 images of membership dues receipt free. membership dues receipt template invoice receipt template free adventurebooksclub templates. membership dues receipt template home southwest council pta ideas.


text:
Q: DDK make to .sln Is there an tool that would convert WinDDK make to VS2010 project\solution?

A: Take a look at DDKBuild.

*

*http://www.hollistech.com/Resources/ddkbuild/ddkbuild.htm
I use Visual Studio 2012 in combination with DDKBuild to compile drivers - when errors show up I can see them in the Error List window and can get taken straight to the right line in the driver source...saves a bunch of time!
I've set up various SolutionConfigurations for different driver options that I want e.g. running a PreFast pass, compiling as 32bit, 64bit, for different OS targets, etc - makes it super easy to switch between Release and Debug, or the static analysis tools.
Basically you create a new Visual Studio Makefile Project in Visual studio, then set the NMAKE|Build Command Line to something like this:
ddkbuild -WIN7 -prefast checked . -cZ

or
ddkbuild -WIN7XP checked . -cZ

or
ddkbuild -WIN7XP free . -cZ

etc, depending on the platform you are targeting.
I haven't used it myself, but for a more powerful way to leverage Visual Studio to do driver development, take a look at VisualDDK...it can let you develop your driver via VMWare....so that crashes just take down the virtual machine, rather than your whole machine. It also offers a way to do kernel debugging .... normally you need a secondary machine to do that (and a USB, Firewire, or Ethernet link).

*

*http://visualddk.sysprogs.org/

redpajama_set_name: RedPajamaStackExchange


text:
The Replacements return to NBC Studios to play the Tonight Show with Jimmy Fallon
by Andrea Swensson · September 9, 2014
Tommy Stinson and Paul Westerberg jamming in the greenroom of the Tonight Show (Photo via the Replacements on Facebook)
It's been a banner year for Minnesota musicians on late-night television, with both Trampled by Turtles and Jeremy Messersmith performing on The Late Show with David Letterman in recent months and the Replacements making their triumphant return to NBC Studios to perform on The Tonight Show with Jimmy Fallon.
Tuesday night's appearance on the show marked the first time that co-founders Paul Westerberg and Tommy Stinson performed as the Replacements since performing sloppy renditions of "Bastards of Young" and "Kiss Me on the Bus" on Saturday Night Live in January 1986 and subsequently getting banned from the show. (Westerberg did manage to return to SNL seven years later to play a solo set.) To add to the excitement, it was announced that one of the other guests on the Mats' episode of The Tonight Show would be none other than Keith Richards of the Rolling Stones.
The Tonight Show appearance was clearly just as big of a deal for the band and the producers of the show as it was for the fans back home who are gearing up to see them play the sold-out Midway Stadium show on Saturday night. Starting in the afternoon on Tuesday, photos and updates started coming fast and furious from the Replacements' accounts, the Roots' ?uestlove, Fallon's music booker Jonathan Cohen, and our own Mary Lucia, who was able to attend the taping.
Here's Mary Lucia's account of the show, as told over the phone after the taping:
"I went with my childhood friend, who lived next door to us in our old neighborhood," she says. "They ended up taping at 4:30 or 5:00. The audience, I would say, was about 200 people at the most, and the guests were Debra Messing and Britney Spears. And Britney Spears—girl can do a fast change. She comes on in a red plunging evening gown and does the 'Top 5 reasons why Britney Spears should be dating on Tinder,' and she looks really nervous through the whole thing. They whipped her out of that gown and into a pair of shorts and Uggs in two minutes. She was in her street clothes and out the door. She must be friends with Fallon. So she just whisked in and out immediately."
"And then Keith is the first guest, and he talks about his book, which was inspired by being a grandfather. And his granddaughter was in the audience doing a live sketching of Jimmy and Keith while the show was going on. So Keith takes up two segments, which was sort of surprising, but I guess not really because you could tell Jimmy was clearly a fan."
"Then Debra Messing came out, she's got a new show or something, she was only on one segment. And then the Replacements came out! They had a little more time to warm up and get ready, and we got to stand in the back. They played 'Alex Chilton,' and Paul changed a little bit of the lyrics and stuff, like 'I could die in NYC.' And because Keith went kind of long, it kind of eked into the Replacements' second song. So what happened is the ended up telling us they were going to use footage from the dress rehearsal to put online, but we were all pretty bummed because we were all expecting two songs. But what are you going to do, yell at Keith Richards?"
"I was trying so hard to take a picture of Keith, and this guy literally flashes this book in front of his face the second that I took the picture. They were just hardcore about cameras."
"Keith had a little moment with Tommy and had a moment with Paul and Johnny, Paul's son. It was really cute. We were laughing, because I was asking Johnny in the car earlier if he was a Stones fan, and we were saying, 'What would this be the equivalent of? If my parents took me to see Buddy Holly?' You could tell that Paul was kind of nervous [to see Keith], to be honest, because I don't think they have a friendship or whatever. They've played together and they've met before, but by no means a friendship. It was cute, someone was definitely trying to make sure, 'hey Paul this is Keith. Keith this is Paul.'"
Here are more of Mary's photos:
Here's a roundup of some of the other photos and teasers to emerge online on Tuesday:
The 2014 Replacements (David Minehan, Tommy Stinson, Paul Westerberg, and Josh Freese) with Keith Richards:
Tommy Stinson with Keith Richards and Tommy's daughter, Ruby:
@officialKeef & @ruby_stinson pic.twitter.com/CyO8MpUe4G
— Tommy Stinson (@tommy_stinson) September 9, 2014
The Replacements sound-checking on set:
The Replacements sound checking in Studio 6B right now! Tonight will be their first NBC performance in 28 years. #FallonTonight
A photo posted by The Tonight Show (@fallontonight) on Sep 9, 2014 at 8:53am PDT
?uestlove with Tommy Stinson:
Friggin Tommy Stinson! #TheReplacements return to NBC!!!!! #NewEra! #Legends #FallonTonight
A photo posted by Questlove Gomez (@questlove) on Sep 9, 2014 at 1:51pm PDT
Tonight Show music booker Jonathan Cohen with Tommy Stinson:
A view of the Replacements and Keith Richards from behind:
Diane Richards, Paul Westerberg, and Mary Lucia backstage at the Tonight Show:
‹ Older U2 releases new album on iTunes—for free
Newer › Today's Music News, including at least a little news that's not about U2 or Apple


Shoho Y12 Kimura T13 Yanagawa Y12 Saito A3 Inoue T3 Suto C3 Tsunekawa K13 Araki O13 Nara M14 Tokue Y4 Murakami M13.
Vaccination Status and Antibody Titers against Rubella and Measles among Japanese Female College Students Majoring in Childcare between 2015 and 2018.
Tohoku J Exp Med. 2018 Oct;246(2):73-79. doi: 10.1620/tjem.246.73.
Shoho Y Kimura T Yanagawa Y Saito A Inoue T Suto C Tsunekawa K Araki O Nara M Tokue Y Murakami M.
In 2014 for the protection of medical workers against measles and rubella infection the Japanese Society for Infection Prevention and Control (JSIPC) recommended either maintaining antibody titers of seroprotective range or two-dose vaccination. JSIPC defined antibody titers into 3 ranges: seroprotective as expected prevention of infection seronegative as under detection levels and seropositive as antibody titers ranged between seronegative and seroprotective. This study aimed to explore the association between the number of vaccine doses received and the antibody titers against measles and rubella among Japanese college students majoring in childcare. A total of 841 female students with no history of measles or rubella were serologically screened at the time of college admission between 2015 and 2018. All 841 students had been vaccinated against measles; 738 (87.8%) received two doses of the measles vaccine and 103 (12.2%) received one dose. Likewise 839 students except for two had been vaccinated against rubella; 719 (85.7%) received two doses of the rubella vaccine and 120 (14.3%) received one dose. We thus found that 107 students (12.7%) were seropositive for measles-specific IgG and 731 (86.9%) attained seroprotective titers. By contrast in case of rubella-specific IgG only 462 students (55.1%) attained seroprotective titers and 371 students (44.1%) were seropositive. The two students without receiving rubella vaccination were classified as seronegative. In conclusion despite that > 85% of students surveyed had received two doses of measles and rubella vaccines a substantial number of students remain susceptible to measles and especially rubella at the time of college admission.


Incentives are the reward for work well done, and we strive to ensure that they are truly rewarding. We customize incentives as per needs and budget.
Az'Zaha has a dedicated division in Muscat Oman for outdoor operation for team building parties, company staff parties, beach & island parties, incentive parties, parties in beach, desert, mountain, wadis, etc with full setup. We do operation for the companies in Oman, UAE, Europe and other contries.
Here we board luxurious speed boats and speed away in search of dolphins. As we leave the jetty we get a splendid view of Muscat from theGulf ofOman. Enjoy the scenic beauty of Oman's coastline in a fiber boat over the pristine waters of Oman's capital area and experience the breathtaking views of some of its landmarks. Admire the majestic Al Bustan Palace hotel and Al Bustan Village from the quite seas. Then we sail towards Qantab Village, Bander Jissah, where you can see the Oman Dive centre and the Shangri-la resort from the sea. In a while you'll encounter shoals of dolphins.
The most acrobatic of all dolphins, the spinners may be courting, communicating, resting, socializing, nursing or teaching their young. View their fantastic display of sheer joy and exuberance, undisturbed. And if it's your lucky day, you may come across the giants of the deep – 'Whales'. Before we reach the island, we allow those who are interested to indulge in snorkeling thus giving you an opportunity to have a glimpse of the rich marine life of Oman. There is also an option of we stop at a bay where the locals will bring fresh coconut water in fishing boats which will not only be a pleasant surprise but a means to mingle with the local people.
Later we reach the isolated Bander Khairan island. On this island with privacy, you would be amazed by the setup that awaits you for an entertaining afternoon. Mats with beach umbrellas would be put in place for you to relax and enjoy the sun. Arabic tents would be put up in this island – One tent for the delicious BBQ and the other would be neatly decked with cushions and carpets known in the Arab world as Majlis for guests to relax. An Omani Oudh player would entertain you while you relax under the tent.
Several team building activities can be organized at the island for the group. Beach games like beach volleyball, soccer can be conducted. Other fun games like Relay races, Tug of war and more team building games will be a part of the itinerary.
After an eventful afternoon; board the boats again to sail back towards the marina.
A dinner program in the island for BOEING, USA.


The South Downs NPA has recently launched a free guide to 12 car-free sections of the South Downs Way. A pdf with routes and travel information is available to download from their website, and printed versions are available by post or at Tourist Information centres.
Much of the initial planning for Car Free Walks was done in the hills (and pubs) near Brighton and Lewes, so we are especially delighted to share this news!
Continuing with the South Downs theme, we had a wet but enjoyable return visit at the end of the summer – you can read about it here.
We have also put together some ideas for of how to plan a car-free walk with kids: read them here, and let us know any more tips we can share.
Our latest prize draw offers the chance to win a walking guide to the West Somerset Railway, which opens up some fabulous car-free walking around the Quantocks and coastline. For a chance to win, simply enter a walk to the website before the end of December.
We are pleased to announce Norfolk Holiday Cottages as our latest sponsors! Many thanks for getting involved and supporting our work.
The next newsletter will be out in February-ish. Please send us any news and until then, happy walking!


First off, this is the third book in the series so if you have not read the first two you would want to do that prior to starting this book. That said, this is a well written book in the historical christian fiction genre. The story is interesting but has several immature actions I am not thrilled about. Aside from that the plot is well handled with a good flow and clean feel. I like how Lessman keeps up with previously developed characters (couples) and gives the whole series a comforting feel. I received an ARC through Revell publishing in exchange for an honest review. This in no way influenced my opinion.


text:
Q: Using setState with onChange does not update What am I looking for?
A way to use setState() on an input element that updates my state immediately with onChange.
What have I done so far?
I have two components, BooksApp and SearchBook. I am passing result to SearchBook as a prop to be rendered. Then I am capturing the changes on the input element using onChange. The onChange is calling the method I passed as a prop as well.
React documentation says the following, but if I use a callback and then in the callback I invoke setState() it sounds to me that I am back at the same situation, because setState() will again be async:

setState() does not always immediately update the component. It may batch or defer the update until later. This makes reading this.state right after calling setState() a potential pitfall. Instead, use componentDidUpdate or a setState callback (setState(updater, callback)), either of which are guaranteed to fire after the update has been applied. If you need to set the state based on the previous state, read about the updater argument below.

What is the issue?
If the user erases the content of the input too quickly, although there is still a console.log('empty') in the console, the setState() does not run and thus result stays the same and does not become an empty array.
This is the content of App.js:
class BooksApp extends Component {
  state = {
    books: [],
    result: [],
    query: ''
  }
  updateQuery = (query) => {
    this.setState({ query: query.trim() })
  }
  objDigger = (arr, diggers) => {
    const digged = [];
    diggers.forEach((d) => {
      let o = {};
      o = arr.filter((a) => a.id === d);
      o.forEach((i) => {
        digged.push(i);
      })
    });
    return digged;
  }
  filterHelper = (result) => {
    const resultKeys = result.map((r) => r.id)
    const stateKeys = this.state.books.map((s) => s.id)
    // this.objDigger(this.state.books, stateKeys)

    // new books
    const newKeys = _array.difference(resultKeys, stateKeys);
    const newObjs = this.objDigger(result, newKeys)

    // existing books
    const existingKeys = _array.difference(resultKeys, newKeys)
    const existingObjs = this.objDigger(this.state.books, existingKeys);

    // search books
    const searchObjs = newObjs.concat(existingObjs);
    return searchObjs;
  }
  searchBook = (query) => {
    this.updateQuery(query);
    if (query) {
      BooksAPI.search(query).then((result) => {
        result = this.filterHelper(result)
        if (!result.error) {
          this.setState({
            result,
          })
        }
      })
    } else {
      console.log('empty');
      this.setState(state => ({
        result: []
      }));
    }
  }
  appHandleChange = (query) => {
    console.log('searching');
    this.searchBook(query);
  }
  render() {
    return (

        <Route path="/search" render={() => (
          <SearchBook
            result={ this.state.result }
            onChange={ this.appHandleChange }
            onChangeShelf={ this.changeShelf }/>
        )}>
        </Route>

    )
  }
}

This is the content of SearchBook:
class SearchBook extends Component {
  handleChange = (book, newShelf) => {
    this.props.onChangeShelf(book, newShelf);
  }
  handleInputChange = (event) => {
    this.props.onChange(event.target.value);
  }
  render() {
    const { result } = this.props;

    return (

          <Link
            to="/"
            className="close-search"
          >
            Close
          </Link>

            <input
              type="text"
              placeholder="Search by title or author"
              onChange={ (event) => this.handleInputChange(event) }
            />

            {result.length>0 && result.map((book) => (

                    <div className="book-cover" style={{ width: 128, height: 193, backgroundImage: `url(${book.imageLinks && book.imageLinks.smallThumbnail})` }}>

                    <BookShelfChanger
                      shelf={book.shelf ? book.shelf : 'none'}
                      onChangeShelf={(newShelf) => {
                        this.handleChange(book, newShelf)
                      }}
                    ></BookShelfChanger>

{book.title}

{book.authors}

            ))}

    )
  }
}


text:
Book review: Call The Midwife by Jennifer Worth
Posted by jslusher11 on April 12, 2016 April 25, 2016
It would be very difficult for this book to live up to my hopes considering how strongly I feel about the BBC Television series it spawned, but it came close. To write prose with the elegant power that would be required to make the written word as moving, emotional and thought-provoking as the beautifully written and performed TV series would require an unusual literary skill, and Worth, a nurse not a writer, almost has it. Her organization of the chapters into distinct stories around particular characteristics or themes is extremely effective and engaging in a way that would be hard to duplicate with a strictly chronological narrative, and one can readily see how nicely it suited the format of a weekly television series.
My greatest curiosity was to see how closely the stories in the TV series mirror those Worth tells in her book, and, especially to see if the book also evokes the same tender compassion that's the hallmark of the television program. I'm extremely happy to report that on the latter point, the answer is yes. As I said, I don't believe Worth is as prosaic or eloquent as the video production, but her style indeed is warm, compassionate and self-effacing. To some degree, the book has a bit more of the gritty feel of the London slums, and Worth very vividly describes the sights, smells and sounds of the East End in the late '50s and early '60s. Although it doesn't pull punches, the view of East End poverty in the TV show sometimes seems slightly sanitized; that is not the case in Worth's book.
Her description of her encounter with a particularly filthy woman who turns out to have syphilis is an excellent case in point. Worth describes her revulsion at the woman's appearance and her outrage when she sees the woman seeming to abuse her two young children verbally and physically. But as the story progresses, she also slips in new details she learns about the woman's situation and the lessons she learns from watching the non-judgmental nuns deal with the woman, so that by the end of the story, one has a greater sense of compassion for the poverty-stricken woman, an appreciation for Worth's acquired humility and an extremely subtle and effective hint at the spiritual leadership of the Nonnatus House nuns that slowly chip away at her condescending attitude toward religion.
Similarly, it was fascinating to see Worth's interactions with the Warren couple and their 24-and-growing brood. Indeed, her description of the crisis involving No. 25's premature birth was one of many points during the book when I simply could not put it down until I had finished the passage. And it was interesting to note the three stories Worth tells of interracial birth that get blended into a single episode in the TV series.
While it becomes clear as the book progresses – much like the central character in Laura Hillenbrand's Unbroken – that Worth is undergoing a spiritual awakening, her approach to that event is so unassuming and deftly handled that one gets a greater appreciation for the meaningful personal changes that working at Nonnatus House began in Worth's life. There are two more books in this series, and I am eager to take them both up in my reading this year. I'm not sure that one needs to read the books to have a greater appreciation for the wondrous television production or whether it is accurate to say that either format is merely complementary to the other. The happy fact is that each overflows with a sense of human compassion. Each could stand fine on its own, and it must be said that the television series is much richer and deeper in its story telling and personal detail, but both are joys not to be missed.
← From Brussels terrorism, the too-frequent deliberations on an iconic image of tragedy
A Rebuke of Irony →


There are two activation models that we've identified when looking at how to sustain momentum in the marketplace for breakthrough performance: marathoner and sprinters. Marathoners launch at a slower pace and build off their momentum, picking up speed as time goes on. Sprinters launch with substantial support and come out fast, rarely slowing down. More often, larger companies use this model when they are launching line extensions or a product that is relatively lower risk. These products carry a meaningful price premium, on average 1.9x the category average. But the marathoner approach is certainly capturing its share of the consumer wallets as well. These products are priced at 35 percent premium on average versus competitors in their categories. Smaller companies or brands launching products in a new category were more likely to follow this model.
Celebrating breakthrough innovations means taking a deeper dive into how they were developed, what consumer demand they are meeting, how companies are successfully creating a distinct concept, and how companies learned both before and during launch. In a session during Nielsen's Consumer 360, we heard from Roberto Cymrot, Knowledge & Insights Director, glacéau-Coke, who shared insights from Coke and vitaminwater zero, which was our only 2010 Platinum Breakthrough Innovation winner. You're not going to get every innovation right, but learning from your experience as well as others will certainly improve the odds of breakthrough innovation.


text:
Chrysaora wurlerra is een schijfkwal uit de familie Pelagiidae. De kwal komt uit het geslacht Chrysaora. Chrysaora wurlerra werd in 2008 voor het eerst wetenschappelijk beschreven door Gershwin & Zeidler.

Schijfkwal

redpajama_set_name: RedPajamaWikipedia


Beyond These Dark Lands Are Edges Of Joy: Should I Organize My Book Of Poems Into Chapters?
Should I Organize My Book Of Poems Into Chapters?
Someone suggested that I organize the poems for my book, Beyond These Dark Lands are Edges Of Joy, into chapters, and I wonder if I should.
There are some advantages to using chapters.
Chapters can break up the collection into manageable sections for the reader.
Chapters can each present a theme.
Chapters can offer the reader choices in how they consume the collection.
Chapters can give a preview and prepare the reader for the pages that follow.
Chapters give the reader a quick overview of the entire work.
Chapters can create problems for a book of poems. They can limit the reader's interpretation of a poem because the reader views the poem through the context of the chapter title and not experience the poem in its own unique way.
How many poems should be in each one?
Should all the chapters be the same length?
Should the chapter titles support the name of the book or cast ahead to the poems that follow?
If some poems do not fit the theme of any of the chapters, do I edit them out or write a few more poems to make a new chapter or rewrite the poems so they fit one of the chapters, and risk a weaker poem or a weaker chapter?
Without the chapter divisions, the reader can progress through the collection and come to a conclusion one poem at a time.
Without chapter divisions, the reader may get tired and since they do not see a dividing point put it down and not return to it.
My choices must be measured against my original vision for the project, or else I will end up with something that will lack unity, be confusing and without a clear message. I feel that God gave me the idea to write this book of poems to encourage people who are going through difficult times with a reminder of His sacrificial love and wise purpose for them. Which brings me to the biggest question of all; will a chapter based format enhance my original vision for the work or take away from it?
I can just say yes or no and get on with it, but what if I am wrong and miss an opportunity to make the collection better than it would have been otherwise?
I will test the collection both ways for a while. I'll organize them one way (in chapter form) and see if it works and then I'll arrange them the other way (without chapter breaks) and see if it is better. After I look at them both ways for a while I will decide.