text:
package edu.cmu.ml.rtw.generic.data.annotation;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONObject;

import edu.cmu.ml.rtw.generic.data.Context;
import edu.cmu.ml.rtw.generic.data.DataTools;
import edu.cmu.ml.rtw.generic.data.DataTools.Command;
import edu.cmu.ml.rtw.generic.data.DataTools.MakeInstanceFn;
import edu.cmu.ml.rtw.generic.data.annotation.nlp.TokenSpan;
import edu.cmu.ml.rtw.generic.data.annotation.structure.DatumStructureCollection;
import edu.cmu.ml.rtw.generic.data.feature.DataFeatureMatrix;
import edu.cmu.ml.rtw.generic.data.feature.Feature;
import edu.cmu.ml.rtw.generic.data.feature.FeatureClassificationMethod;
import edu.cmu.ml.rtw.generic.data.feature.FeatureConjunction;
import edu.cmu.ml.rtw.generic.data.feature.FeatureConstant;
import edu.cmu.ml.rtw.generic.data.feature.FeatureConstituencyParseRelation;
import edu.cmu.ml.rtw.generic.data.feature.FeatureConstituencyPath;
import edu.cmu.ml.rtw.generic.data.feature.FeatureDependencyPathType;
import edu.cmu.ml.rtw.generic.data.feature.FeatureGazetteerContains;
import edu.cmu.ml.rtw.generic.data.feature.FeatureGazetteerEditDistance;
import edu.cmu.ml.rtw.generic.data.feature.FeatureGazetteerInitialism;
import edu.cmu.ml.rtw.generic.data.feature.FeatureGazetteerPrefixTokens;
import edu.cmu.ml.rtw.generic.data.feature.FeatureGramCluster;
import edu.cmu.ml.rtw.generic.data.feature.FeatureGramContextPattern;
//import edu.cmu.ml.rtw.generic.data.feature.FeatureIdentity;
import edu.cmu.ml.rtw.generic.data.feature.FeatureDependencyPath;
import edu.cmu.ml.rtw.generic.data.feature.FeatureNGramContext;
import edu.cmu.ml.rtw.generic.data.feature.FeatureNGramDep;
import edu.cmu.ml.rtw.generic.data.feature.FeatureNGramSentence;
import edu.cmu.ml.rtw.generic.data.feature.FeaturePredicateArgumentPath;
import edu.cmu.ml.rtw.generic.data.feature.FeatureSet;
import edu.cmu.ml.rtw.generic.data.feature.FeatureStringForm;
import edu.cmu.ml.rtw.generic.data.feature.FeatureTokenCount;
import edu.cmu.ml.rtw.generic.data.feature.FeatureTokenSpanFnComparison;
import edu.cmu.ml.rtw.generic.data.feature.FeatureTokenSpanFnDataVocab;
import edu.cmu.ml.rtw.generic.data.feature.FeatureTokenSpanFnDataVocabTrie;
import edu.cmu.ml.rtw.generic.data.feature.FeatureTokenSpanFnFilteredVocab;
import edu.cmu.ml.rtw.generic.data.feature.FeatureWord2Vec;
import edu.cmu.ml.rtw.generic.data.feature.rule.RuleSet;
import edu.cmu.ml.rtw.generic.model.SupervisedModel;
import edu.cmu.ml.rtw.generic.model.SupervisedModelAreg;
import edu.cmu.ml.rtw.generic.model.SupervisedModelCreg;
import edu.cmu.ml.rtw.generic.model.SupervisedModelLGApproximation;
import edu.cmu.ml.rtw.generic.model.SupervisedModelLabelDistribution;
import edu.cmu.ml.rtw.generic.model.SupervisedModelLibSVM;
import edu.cmu.ml.rtw.generic.model.SupervisedModelLogistmarGramression;
import edu.cmu.ml.rtw.generic.model.SupervisedModelPartition;
import edu.cmu.ml.rtw.generic.model.SupervisedModelSVM;
import edu.cmu.ml.rtw.generic.model.SupervisedModelSVMStructured;
import edu.cmu.ml.rtw.generic.model.SupervisedModelStanfordLinear;
import edu.cmu.ml.rtw.generic.model.SupervisedModelWekaOneClass;
import edu.cmu.ml.rtw.generic.model.SupervisedModelWekaSVMOneClass;
import edu.cmu.ml.rtw.generic.model.SupervisedModelYADLL;
import edu.cmu.ml.rtw.generic.model.evaluation.GridSearch;
import edu.cmu.ml.rtw.generic.model.evaluation.metric.SupervisedModelEvaluation;
import edu.cmu.ml.rtw.generic.model.evaluation.metric.SupervisedModelEvaluationAccuracy;
import edu.cmu.ml.rtw.generic.model.evaluation.metric.SupervisedModelEvaluationF;
import edu.cmu.ml.rtw.generic.model.evaluation.metric.SupervisedModelEvaluationPrecision;
import edu.cmu.ml.rtw.generic.model.evaluation.metric.SupervisedModelEvaluationRecall;
import edu.cmu.ml.rtw.generic.opt.search.ParameterSearchable;
import edu.cmu.ml.rtw.generic.opt.search.Search;
import edu.cmu.ml.rtw.generic.parse.Assignment;
import edu.cmu.ml.rtw.generic.parse.AssignmentList;
import edu.cmu.ml.rtw.generic.parse.CtxParsableFunction;
import edu.cmu.ml.rtw.generic.parse.Obj;
import edu.cmu.ml.rtw.generic.parse.Obj.Function;
import edu.cmu.ml.rtw.generic.structure.WeightedStructure;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassification;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassificationConfusionData;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassificationConfusionMatrix;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassificationMeasureAUC;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassificationMeasureAccuracy;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassificationMeasureConstant;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassificationMeasureF;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassificationMeasurePrecision;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassificationMeasureRecall;
import edu.cmu.ml.rtw.generic.task.classify.EvaluationClassificationROC;
import edu.cmu.ml.rtw.generic.task.classify.MethodClassification;
import edu.cmu.ml.rtw.generic.task.classify.MethodClassificationConstant;
import edu.cmu.ml.rtw.generic.task.classify.MethodClassificationFilterDatumIndicator;
import edu.cmu.ml.rtw.generic.task.classify.MethodClassificationLabelMapping;
import edu.cmu.ml.rtw.generic.task.classify.MethodClassificationSupervisedModel;
import edu.cmu.ml.rtw.generic.task.classify.TaskClassification;
import edu.cmu.ml.rtw.generic.util.Pair;

/**
 * Datum represents a (possibly) labeled datum (training/evaluation
 * example).  A domain specific project should extend this class with
 * implementations of methods/tools that are particular to pieces of
 * data in their domain.  See
 *
 * @author Bill McDowell
 *
 * @param <L> label type
 */
public abstract class Datum<L> {
	protected int id;
	protected L label;
	protected List<Pair<L, Double>> labelDistribution;

	public int getId() {
		return this.id;
	}

	public L getLabel() {
		return this.label;
	}

	public boolean setLabel(L label) {
		this.label = label;
		return true;
	}

	public boolean setLabelWeight(L label, double weight) {
		if (this.labelDistribution == null)
			this.labelDistribution = new ArrayList<Pair<L, Double>>(2);

		Pair<L, Double> pair = getLabelWeightPair(label);
		if (pair == null)
			this.labelDistribution.add(new Pair<L, Double>(label, weight));
		else
			pair.setSecond(weight);

		return true;
	}

	public double getLabelWeight(L label) {
		if (this.labelDistribution == null) {
			if ((this.label == null && label == null) || (this.label != null && this.label.equals(label)))
				return 1.0;
			else
				return 0.0;
		}

		Pair<L, Double> pair = getLabelWeightPair(label);
		if (pair == null)
			return 0.0;
		else
			return pair.getSecond();
	}

	private Pair<L, Double> getLabelWeightPair(L label) {
		for (Pair<L, Double> pair : this.labelDistribution)
			if (pair.getFirst().equals(label))
				return pair;
		return null;
	}

	@Override
	public int hashCode() {
		// FIXME: Make better
		return this.id;
	}

	@SuppressWarnings("unchecked")
	@Override
	public boolean equals(Object o) {
		Datum<L> datum = (Datum<L>)o;
		return datum.id == this.id;
	}

	/**
	 * Tools contains tools for working with a particular type
	 * of datum.  For example, each type of datum type has a
	 * collection of "extractors" for retrieving associated strings or
	 * token spans that are necessary for computing features, and
	 * each datum type also has an associated set of models and
	 * features that can be used with them.
	 *
	 * @author Bill McDowell
	 *
	 * @param <D> datum type
	 * @param <L> label type
	 *
	 */
	public static abstract class Tools<D extends Datum<L>, L> {
		public static abstract class Structurizer<D extends Datum<L>, L, S extends WeightedStructure> extends CtxParsableFunction {
			protected DatumContext<D, L> context;

			public abstract String getStructureId(D datum, L label, Map<String, S> structures);
			public abstract boolean addToStructures(D datum, L label, double weight, Object source, Map<String, S> structures, Map<String, Collection<WeightedStructure>> changes);
			public abstract Map<String, S> makeStructures();
			public abstract Map<L, Pair<Object, Double>> getLabels(D datum, Map<String, S> structures);
			public abstract Structurizer<D, L, S> makeInstance(DatumContext<D, L> context);
			public abstract DataSet<D, L> makeData(DataSet<D, L> existingData, Map<String, S> structures);

			public boolean matchesData(DataSet<?, ?> data) {
				return data.getDatumTools().equals(this.context.getDatumTools());
			}
		}

		public static abstract class DataSetBuilder<D extends Datum<L>, L> extends CtxParsableFunction {
			protected DatumContext<D, L> context;

			public abstract DataSetBuilder<D, L> makeInstance(DatumContext<D, L> context);
			public abstract DataSet<D, L> build();
		}

		public static interface StringExtractor<D extends Datum<L>, L> {
			String toString();
			String[] extract(D datum);
		}

		public static interface TokenSpanExtractor<D extends Datum<L>, L> {
			String toString();
			TokenSpan[] extract(D datum);
		}

		public static interface DoubleExtractor<D extends Datum<L>, L> {
			String toString();
			double[] extract(D datum);
		}

		public static interface LabelMapping<L> {
			String toString();
			L map(L label);
		}

		public static interface LabelIndicator<L> {
			String toString();
			boolean indicator(L label);
			double weight(L label);
		}

		public static interface DatumIndicator<D> {
			String toString();
			boolean indicator(D datum);
		}

		public static interface InverseLabelIndicator<L> {
			String toString();
			L label(Map<String, Double> indicatorWeights, List<String> positiveIndicators);
		}

		public static interface Clusterer<D extends Datum<L>, L, C> {
			String toString();
			C getCluster(D datum);
		}

		protected DataTools dataTools;

		private Map<String, DataSetBuilder<D, L>> dataSetBuilders;
		private Map<String, TokenSpanExtractor<D, L>> tokenSpanExtractors;
		private Map<String, StringExtractor<D, L>> stringExtractors;
		private Map<String, DoubleExtractor<D, L>> doubleExtractors;
		private Map<String, LabelMapping<L>> labelMappings;
		private Map<String, LabelIndicator<L>> labelIndicators;
		private Map<String, DatumIndicator<D>> datumIndicators;
		private Map<String, InverseLabelIndicator<L>> inverseLabelIndicators;

		private Map<String, Feature<D, L>> genericFeatures;
		private Map<String, SupervisedModel<D, L>> genericModels;
		private Map<String, SupervisedModelEvaluation<D, L>> genericEvaluations;
		private Map<String, Structurizer<D, L, ?>> genericStructurizers;

		private Map<String, DatumStructureCollection<D, L>> genericDatumStructureCollections;

		private Map<String, MethodClassification<D, L>> genericClassifyMethods;
		private Map<String, EvaluationClassification<D, L, ?>> genericClassifyEvals;

		private Map<String, List<Command<?>>> commands;

		public Tools(DataTools dataTools) {
			this.dataTools = dataTools;

			this.dataSetBuilders = new HashMap<String, DataSetBuilder<D, L>>();

			this.tokenSpanExtractors = new HashMap<String, TokenSpanExtractor<D, L>>();
			this.stringExtractors = new HashMap<String, StringExtractor<D, L>>();
			this.doubleExtractors = new HashMap<String, DoubleExtractor<D, L>>();
			this.labelMappings = new HashMap<String, LabelMapping<L>>();
			this.labelIndicators = new HashMap<String, LabelIndicator<L>>();
			this.datumIndicators = new HashMap<String, DatumIndicator<D>>();
			this.inverseLabelIndicators = new HashMap<String, InverseLabelIndicator<L>>();

			this.genericFeatures = new HashMap<String, Feature<D, L>>();
			this.genericModels = new HashMap<String, SupervisedModel<D, L>>();
			this.genericEvaluations = new HashMap<String, SupervisedModelEvaluation<D, L>>();

			this.genericDatumStructureCollections = new HashMap<String, DatumStructureCollection<D, L>>();
			this.genericStructurizers = new HashMap<String, Structurizer<D, L, ?>>();

			this.genericClassifyMethods = new HashMap<String, MethodClassification<D, L>>();
			this.genericClassifyEvals = new HashMap<String, EvaluationClassification<D, L, ?>>();

			this.commands = new HashMap<String, List<Command<?>>>();

			addLabelMapping(new LabelMapping<L>() {
				public String toString() {
					return "Identity";
				}

				@Override
				public L map(L label) {
					return label;
				}
			});

			addGenericFeature(new FeatureGazetteerContains<D, L>());
			addGenericFeature(new FeatureGazetteerEditDistance<D, L>());
			addGenericFeature(new FeatureGazetteerInitialism<D, L>());
			addGenericFeature(new FeatureGazetteerPrefixTokens<D, L>());
			addGenericFeature(new FeatureNGramContext<D, L>());
			addGenericFeature(new FeatureNGramSentence<D, L>());
			addGenericFeature(new FeatureNGramDep<D, L>());
			//addGenericFeature(new FeatureIdentity<D, L>()); // FIXME The command for this conflicts with FnIdentity
			addGenericFeature(new FeatureDependencyPath<D, L>());
			addGenericFeature(new FeatureConstituencyPath<D, L>());
			addGenericFeature(new FeatureConjunction<D, L>());
			addGenericFeature(new FeatureGramContextPattern<D, L>());
			addGenericFeature(new FeatureTokenCount<D, L>());
			addGenericFeature(new FeatureStringForm<D, L>());
			addGenericFeature(new FeatureGramCluster<D, L>());
			addGenericFeature(new FeatureTokenSpanFnDataVocab<D, L>());
			addGenericFeature(new FeatureTokenSpanFnFilteredVocab<D, L>());
			addGenericFeature(new FeatureTokenSpanFnDataVocabTrie<D, L>());
			addGenericFeature(new FeatureDependencyPathType<D, L>());
			addGenericFeature(new FeatureConstituencyParseRelation<D, L>());
			addGenericFeature(new FeatureWord2Vec<D, L>());
			addGenericFeature(new FeatureTokenSpanFnComparison<D, L>());
			addGenericFeature(new FeaturePredicateArgumentPath<D, L>());
			addGenericFeature(new FeatureClassificationMethod<D, L>());
			addGenericFeature(new FeatureConstant<D, L>());

			addGenericModel(new SupervisedModelCreg<D, L>());
			addGenericModel(new SupervisedModelLabelDistribution<D, L>());
			addGenericModel(new SupervisedModelSVM<D, L>());
			addGenericModel(new SupervisedModelSVMStructured<D, L>());
			addGenericModel(new SupervisedModelPartition<D, L>());
			addGenericModel(new SupervisedModelAreg<D, L>());
			addGenericModel(new SupervisedModelLogistmarGramression<D, L>());
			addGenericModel(new SupervisedModelLGApproximation<D, L>());
			addGenericModel(new SupervisedModelYADLL<D, L>());
			addGenericModel(new SupervisedModelWekaOneClass<D, L>());
			addGenericModel(new SupervisedModelWekaSVMOneClass<D, L>());
			addGenericModel(new SupervisedModelLibSVM<D, L>());
			addGenericModel(new SupervisedModelStanfordLinear<D, L>());

			addGenericEvaluation(new SupervisedModelEvaluationAccuracy<D, L>());
			addGenericEvaluation(new SupervisedModelEvaluationPrecision<D, L>());
			addGenericEvaluation(new SupervisedModelEvaluationRecall<D, L>());
			addGenericEvaluation(new SupervisedModelEvaluationF<D, L>());

			addGenericClassifyMethod(new MethodClassificationSupervisedModel<D, L>());
			addGenericClassifyMethod(new MethodClassificationConstant<D, L>());
			addGenericClassifyMethod(new MethodClassificationLabelMapping<D, L>());
			addGenericClassifyMethod(new MethodClassificationFilterDatumIndicator<D, L>());

			addGenericClassifyEval(new EvaluationClassificationConfusionData<D, L>());
			addGenericClassifyEval(new EvaluationClassificationConfusionMatrix<D, L>());
			addGenericClassifyEval(new EvaluationClassificationROC<D, L>());
			addGenericClassifyEval(new EvaluationClassificationMeasureAccuracy<D, L>());
			addGenericClassifyEval(new EvaluationClassificationMeasurePrecision<D, L>());
			addGenericClassifyEval(new EvaluationClassificationMeasureRecall<D, L>());
			addGenericClassifyEval(new EvaluationClassificationMeasureF<D, L>());
			addGenericClassifyEval(new EvaluationClassificationMeasureAUC<D, L>());
			addGenericClassifyEval(new EvaluationClassificationMeasureConstant<D, L>());

			addGenericDataSetBuilder(new DataSetBuilderStored<D, L>());

			addConstructionCommand(new RuleSet<D, L>(null), new MakeInstanceFn<RuleSet<D, L>>() {
					@SuppressWarnings("unchecked")
					public RuleSet<D, L> make(String name, Context parentContext) {
						return new RuleSet<D, L>((DatumContext<D, L>)parentContext); } });

			addConstructionCommand(new GridSearch<D, L>(null), new MakeInstanceFn<GridSearch<D, L>>() {
				@SuppressWarnings("unchecked")
				public GridSearch<D, L> make(String name, Context parentContext) {
					return new GridSearch<D, L>((DatumContext<D, L>)parentContext); } });

			addConstructionCommand(new FeatureSet<D, L>(null), new MakeInstanceFn<FeatureSet<D, L>>() {
				@SuppressWarnings("unchecked")
				public FeatureSet<D, L> make(String name, Context parentContext) {
					return new FeatureSet<D, L>((DatumContext<D, L>)parentContext); } });

			addConstructionCommand(new DataFeatureMatrix<D, L>(null), new MakeInstanceFn<DataFeatureMatrix<D, L>>() {
				@SuppressWarnings("unchecked")
				public DataFeatureMatrix<D, L> make(String name, Context parentContext) {
					return new DataFeatureMatrix<D, L>((DatumContext<D, L>)parentContext); } });

			addConstructionCommand(new TaskClassification<D, L>(null), new MakeInstanceFn<TaskClassification<D, L>>() {
				@SuppressWarnings("unchecked")
				public TaskClassification<D, L> make(String name, Context parentContext) {
					return new TaskClassification<D, L>((DatumContext<D, L>)parentContext); } });

			addCommand("CloneClassifyMethod", new Command<MethodClassification<D, L>>() {
				@SuppressWarnings("unchecked")
				@Override
				public MethodClassification<D, L> run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					MethodClassification<D, L> method = (MethodClassification<D, L>)datumContext.getMatchClassifyMethod(parameters.get("method").getValue()).clone(referenceName);

					for (Assignment assignment : parameters) {
						if (!assignment.getName().equals("method"))
							method.setParameterValue(assignment.getName(), assignment.getValue());
					}

					return method;
				}
			});

			addCommand("InitClassifyMethod", new Command<MethodClassification<D, L>>() {
				@SuppressWarnings("unchecked")
				@Override
				public MethodClassification<D, L> run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					DataSet<D, L> data = datumContext.getMatchDataSet(parameters.get("devData").getValue());
					MethodClassification<D, L> method = (MethodClassification<D, L>)datumContext.getMatchClassifyMethod(parameters.get("method").getValue()).clone(referenceName);
					if (!method.init(data))
						return null;
					else
						return method;
				}
			});

			addCommand("RunClassifyMethodSearch", new Command<MethodClassification<D, L>>() {
				@SuppressWarnings("unchecked")
				@Override
				public MethodClassification<D, L> run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					ParameterSearchable fn = context.getMatchParameterSearchable(parameters.get("fn").getValue());
					Search search = context.getMatchSearch(parameters.get("search").getValue());

					if (!search.run(fn))
						return null;

					EvaluationClassification<D, L, ?> evaluation = (EvaluationClassification<D, L, ?>)search.getPositionFn(search.getBestPosition());
					return evaluation.getMethod().clone(referenceName);
				}
			});

			addCommand("StoreData", new Command<String>() {
				@SuppressWarnings("unchecked")
				@Override
				public String run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					DataSet<D, L> data = datumContext.getMatchDataSet(parameters.get("data").getValue());
					if (data.isBuildable() && !data.isBuilt() && !data.build())
						return String.valueOf(false);

					return String.valueOf(
							data.store(datumContext.getMatchValue(parameters.get("storage").getValue()),
							   datumContext.getMatchValue(parameters.get("collection").getValue()),
							   context.getMaxThreads()));
				}
			});

			addCommand("PartitionData", new Command<String>() {
				@SuppressWarnings("unchecked")
				@Override
				public String run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					List<String> distributionStr = context.getMatchArray(parameters.get("distribution").getValue());
					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					DataSet<D, L> data = datumContext.getMatchDataSet(parameters.get("data").getValue());
					if (data.isBuildable() && !data.isBuilt() && !data.build())
						return String.valueOf(false);

					double[] distribution = new double[distributionStr.size()];
					for (int i = 0; i < distribution.length; i++)
						distribution[i] = Double.valueOf(distributionStr.get(i));
					List<DataSet<D, L>> parts = data.makePartition(distribution, context.getDataTools().getGlobalRandom());

					for (int i = 0; i < parts.size(); i++) {
						datumContext.addDataSet(parts.get(i));
					}

					return String.valueOf(true);
				}
			});

			addCommand("FilterData", new Command<DataSet<D, L>>() {
				@SuppressWarnings("unchecked")
				@Override
				public DataSet<D, L> run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					DatumIndicator<D> datumIndicator = datumContext.getDatumTools().getDatumIndicator(
							datumContext.getMatchValue(parameters.get("datumIndicator").getValue()));
					DataSet<D, L> data = datumContext.getMatchDataSet(parameters.get("data").getValue());
					if (data.isBuildable() && !data.isBuilt() && !data.build())
						return null;
					return data.filter(referenceName, datumIndicator, context.getMaxThreads());
				}
			});

			addCommand("SubsetData", new Command<DataSet<D, L>>() {
				@SuppressWarnings("unchecked")
				@Override
				public DataSet<D, L> run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					int size = Integer.valueOf(datumContext.getMatchValue(parameters.get("size").getValue()));
					DataSet<D, L> data = datumContext.getMatchDataSet(parameters.get("data").getValue());

					boolean shuffle = false;
					if (parameters.contains("shuffle"))
						shuffle = Boolean.valueOf(datumContext.getMatchValue(parameters.get("shuffle").getValue()));

					if (data.isBuildable() && !data.isBuilt() && !data.build())
						return null;

					return data.subset(referenceName, size, context.getMaxThreads(), shuffle);
				}
			});

			addCommand("UnionData", new Command<DataSet<D, L>>() {
				@SuppressWarnings("unchecked")
				@Override
				public DataSet<D, L> run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					Obj.Array dataSets = (Obj.Array)parameters.get("data").getValue();
					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					DataSet<D, L> unionedData = new DataSet<D, L>(referenceName, Tools.this, null);

					for (int i = 0; i < dataSets.size(); i++) {
						DataSet<D, L> data = datumContext.getMatchDataSet(dataSets.get(i));

						if (data.isBuildable() && !data.isBuilt() && !data.build())
							return null;

						unionedData.addAll(data);
					}

					return unionedData;
				}
			});

			addCommand("SizeData", new Command<String>() {
				@SuppressWarnings("unchecked")
				@Override
				public String run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					DataSet<D, L> data = datumContext.getMatchDataSet(parameters.get("data").getValue());
					if (data.isBuildable() && !data.isBuilt() && !data.build())
						return String.valueOf("-1");
					return String.valueOf(data.size());

				}
			});

			addCommand("SizeFeatures", new Command<String>() {
				@SuppressWarnings("unchecked")
				@Override
				public String run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					AssignmentList parameters = fnObj.getParameters();
					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					FeatureSet<D, L> features = datumContext.getMatchFeatureSet(parameters.get("features").getValue());
					if (!features.isInitialized() && !features.init())
						return String.valueOf("-1");
					return String.valueOf(features.getFeatureVocabularySize());

				}
			});

			this.addCommand("ConjoinDatumIndicators", new Command<String>() {
				@SuppressWarnings("unchecked")
				@Override
				public String run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					String name = context.getMatchValue(fnObj.getParameters().get("name").getValue());
					List<String> fns = context.getMatchArray(fnObj.getParameters().get("fns").getValue());

					DatumContext<D, L> datumContext = (DatumContext<D, L>)context;
					return String.valueOf(datumContext.getDatumTools().addDatumIndicator(new DatumIndicator<D>() {
						@Override
						public String toString() {
							return name;
						}

						@Override
						public boolean indicator(D datum) {
							for (String fn : fns) {
								if (!datumContext.getDatumTools().getDatumIndicator(fn).indicator(datum))
									return false;
							}
							return true;
						}
					}));
				}
			});
		}

		public DataTools getDataTools() {
			return this.dataTools;
		}

		public Collection<TokenSpanExtractor<D, L>> getTokenSpanExtractors() {
			return this.tokenSpanExtractors.values();
		}

		public TokenSpanExtractor<D, L> getTokenSpanExtractor(String name) {
			return this.tokenSpanExtractors.get(name);
		}

		public StringExtractor<D, L> getStringExtractor(String name) {
			return this.stringExtractors.get(name);
		}

		public DoubleExtractor<D, L> getDoubleExtractor(String name) {
			return this.doubleExtractors.get(name);
		}

		public LabelMapping<L> getLabelMapping(String name) {
			return this.labelMappings.get(name);
		}

		public LabelIndicator<L> getLabelIndicator(String name) {
			return this.labelIndicators.get(name);
		}

		public DatumIndicator<D> getDatumIndicator(String name) {
			if (!this.datumIndicators.containsKey(name))
				throw new IllegalArgumentException("Missing datum indicator " + name);

			return this.datumIndicators.get(name);
		}

		public InverseLabelIndicator<L> getInverseLabelIndicator(String name) {
			return this.inverseLabelIndicators.get(name);
		}

		public DataSetBuilder<D, L> makeDataSetBuilder(String name, DatumContext<D, L> context) {
			return this.dataSetBuilders.get(name).makeInstance(context);
		}

		public DataSet<D, L> makeUnbuiltDataSet(String name, DatumContext<D, L> context) {
			return new DataSet<D, L>(this.dataSetBuilders.get(name).makeInstance(context), this);
		}

		public Feature<D, L> makeFeatureInstance(String genericFeatureName, DatumContext<D, L> context) {
			return this.genericFeatures.get(genericFeatureName).makeInstance(context);
		}

		public SupervisedModel<D, L> makeModelInstance(String genericModelName, DatumContext<D, L> context) {
			return this.genericModels.get(genericModelName).makeInstance(context);
		}

		public SupervisedModelEvaluation<D, L> makeEvaluationInstance(String genericEvaluationName, DatumContext<D, L> context) {
			if (!this.genericEvaluations.containsKey(genericEvaluationName))
				return null;
			return this.genericEvaluations.get(genericEvaluationName).makeInstance(context);
		}

		public EvaluationClassification<D, L, ?> makeClassifyEvalInstance(String genericClassifyEvalName, DatumContext<D, L> context) {
			return this.genericClassifyEvals.get(genericClassifyEvalName).makeInstance(context);
		}

		public MethodClassification<D, L> makeClassifyMethodInstance(String genericClassifyMethodName, DatumContext<D, L> context) {
			return this.genericClassifyMethods.get(genericClassifyMethodName).makeInstance(context);
		}

		public DatumStructureCollection<D, L> makeDatumStructureCollection(String genericCollectionName, DataSet<D, L> data) {
			return this.genericDatumStructureCollections.get(genericCollectionName).makeInstance(data);
		}

		public Structurizer<D, L, ?> makeStructurizerInstance(String name, DatumContext<D, L> context) {
			return this.genericStructurizers.get(name).makeInstance(context);
		}

		public boolean addCommand(String name, Command<?> command) {
			if (!this.commands.containsKey(name))
				this.commands.put(name, new ArrayList<Command<?>>());
			this.commands.get(name).add(command);
			return true;
		}

		public <T extends CtxParsableFunction> boolean addConstructionCommand(CtxParsableFunction obj, MakeInstanceFn<T> makeInstanceFn) {
			return addCommand(obj.getGenericName(), new Command<T>() {
				@Override
				public T run(Context context, List<String> modifiers, String referenceName, Function fnObj) {
					T instance = makeInstanceFn.make(obj.getGenericName(), context);
					if (instance.fromParse(modifiers, referenceName, fnObj))
						return instance;
					return null;
				}
			});
		}

		public boolean addTokenSpanExtractor(TokenSpanExtractor<D, L> tokenSpanExtractor) {
			this.tokenSpanExtractors.put(tokenSpanExtractor.toString(), tokenSpanExtractor);
			return true;
		}

		public boolean addStringExtractor(StringExtractor<D, L> stringExtractor) {
			this.stringExtractors.put(stringExtractor.toString(), stringExtractor);
			return true;
		}

		public boolean addDoubleExtractor(DoubleExtractor<D, L> doubleExtractor) {
			this.doubleExtractors.put(doubleExtractor.toString(), doubleExtractor);
			return true;
		}

		public boolean addLabelMapping(LabelMapping<L> labelMapping) {
			this.labelMappings.put(labelMapping.toString(), labelMapping);
			return true;
		}

		public boolean addGenericDataSetBuilder(DataSetBuilder<D, L> builder) {
			this.dataSetBuilders.put(builder.getGenericName(), builder);

			return addConstructionCommand(builder, new MakeInstanceFn<DataSet<D, L>>() {
				@SuppressWarnings("unchecked")
				public DataSet<D, L> make(String name, Context parentContext) {
					return makeUnbuiltDataSet(name, (DatumContext<D, L>)parentContext); } }
			);
		}

		public boolean addGenericFeature(Feature<D, L> feature) {
			this.genericFeatures.put(feature.getGenericName(), feature);

			return addConstructionCommand(feature, new MakeInstanceFn<Feature<D, L>>() {
				@SuppressWarnings("unchecked")
				public Feature<D, L> make(String name, Context parentContext) {
					return makeFeatureInstance(name, (DatumContext<D, L>)parentContext); } }
			);
		}

		public boolean addGenericModel(SupervisedModel<D, L> model) {
			this.genericModels.put(model.getGenericName(), model);

			return addConstructionCommand(model, new MakeInstanceFn<SupervisedModel<D, L>>() {
				@SuppressWarnings("unchecked")
				public SupervisedModel<D, L> make(String name, Context parentContext) {
					return makeModelInstance(name, (DatumContext<D, L>)parentContext); } }
			);
		}

		public boolean addGenericEvaluation(SupervisedModelEvaluation<D, L> evaluation) {
			this.genericEvaluations.put(evaluation.getGenericName(), evaluation);

			return addConstructionCommand(evaluation, new MakeInstanceFn<SupervisedModelEvaluation<D, L>>() {
				@SuppressWarnings("unchecked")
				public SupervisedModelEvaluation<D, L> make(String name, Context parentContext) {
					return makeEvaluationInstance(name, (DatumContext<D, L>)parentContext); } }
			);
		}

		public boolean addGenericClassifyEval(EvaluationClassification<D, L, ?> classifyEval) {
			this.genericClassifyEvals.put(classifyEval.getGenericName(), classifyEval);

			return addConstructionCommand(classifyEval, new MakeInstanceFn<EvaluationClassification<D, L, ?>>() {
				@SuppressWarnings("unchecked")
				public EvaluationClassification<D, L, ?> make(String name, Context parentContext) {
					return makeClassifyEvalInstance(name, (DatumContext<D, L>)parentContext); } }
			);
		}

		public boolean addGenericClassifyMethod(MethodClassification<D, L> classifyMethod) {
			this.genericClassifyMethods.put(classifyMethod.getGenericName(), classifyMethod);

			return addConstructionCommand(classifyMethod, new MakeInstanceFn<MethodClassification<D, L>>() {
				@SuppressWarnings("unchecked")
				public MethodClassification<D, L> make(String name, Context parentContext) {
					return makeClassifyMethodInstance(name, (DatumContext<D, L>)parentContext); } }
			);
		}

		public boolean addGenericStructurizer(Structurizer<D, L, ?> structurizer) {
			this.genericStructurizers.put(structurizer.getGenericName(), structurizer);

			return addConstructionCommand(structurizer, new MakeInstanceFn<Structurizer<D, L, ?>>() {
				@SuppressWarnings("unchecked")
				public Structurizer<D, L, ?> make(String name, Context parentContext) {
					return makeStructurizerInstance(name, (DatumContext<D, L>)parentContext); } }
			);
		}

		public boolean addGenericDatumStructureCollection(DatumStructureCollection<D, L> datumStructureCollection) {
			this.genericDatumStructureCollections.put(datumStructureCollection.getGenericName(), datumStructureCollection);
			return true;
		}

		public boolean addLabelIndicator(LabelIndicator<L> labelIndicator) {
			this.labelIndicators.put(labelIndicator.toString(), labelIndicator);
			return true;
		}

		public boolean addDatumIndicator(DatumIndicator<D> datumIndicator) {
			this.datumIndicators.put(datumIndicator.toString(), datumIndicator);
			return true;
		}

		public boolean addInverseLabelIndicator(InverseLabelIndicator<L> inverseLabelIndicator) {
			this.inverseLabelIndicators.put(inverseLabelIndicator.toString(), inverseLabelIndicator);
			return true;
		}

		public List<LabelIndicator<L>> getLabelIndicators() {
			return new ArrayList<LabelIndicator<L>>(this.labelIndicators.values());
		}

		public <T extends Datum<Boolean>> T makeBinaryDatum(D datum, String labelIndicator) {
			return makeBinaryDatum(datum, this.getLabelIndicator(labelIndicator));
		}

		@SuppressWarnings("unchecked")
		public <T> T runCommand(Context context, List<String> modifiers, String referenceName, Obj.Function fnObj) {
			if (this.commands.containsKey(fnObj.getName())) {
				for (Command<?> command : this.commands.get(fnObj.getName())) {
					Object obj = command.run(context, modifiers, referenceName, fnObj);
					if (obj != null) {
						return (T)obj;
					}
				}
			}

			return this.dataTools.runCommand(context, modifiers, referenceName, fnObj);
		}

		public abstract L labelFromString(String str);
		public abstract JSONObject datumToJSON(D datum);
		public abstract D datumFromJSON(JSONObject json);
		public abstract <T extends Datum<Boolean>> T makeBinaryDatum(D datum, LabelIndicator<L> labelIndicator);
		public abstract <T extends Datum<Boolean>> Datum.Tools<T, Boolean> makeBinaryDatumTools(LabelIndicator<L> labelIndicator);
	}
}


text:
Alejandro Pérez Aracil, conocido como Álex Pérez (Alcorcón, Comunidad de Madrid, España, 21 de enero de 1985), es un futbolista español que actualmente juega de centrocampista en el Ontinyent Club de Futbol. Es hermano de Miguel Pérez.

Trayectoria

El centrocampista, formado en la cantera del Real Madrid CF, tras militar en el Nástic de Tarragona y Albacete Balompié, una experiencia de un año en Grecia en las filas del Aris FC, el jugador se quedó en paro y formó parte del equipo de parados de la AFE. En 2011, varios días antes de firmar por el Ontinyent Club de Futbol, abandonó la concentración para pasar una prueba en Malta y, al no alcanzar un acuerdo con un club de aquel país, se comprometió con el Ontinyent. En este club se reencontró con los jugadores Blanco y Fali, que también han tomado parte en estas sesiones de la AFE.Actualmente milita cedido en el Recreativo de Huelva

Clubes
 Real Madrid, categorías inferiores.
 2002-05 Real Madrid B
 2005-07 Nástic de Tarragona, es baja en noviembre de 2006
 2006-07 Real Madrid B, desde noviembre de 2006 a enero de 2007
 2006-07 Aris Salónica Fútbol Club, desde enero de 2007 a junio de 2007
 2007-09 Albacete Balompié
 2010-11 Ontinyent Club de Futbol

Referencias

Enlaces externos
 Ficha del jugador en futbolmercado

Futbolistas de la Comunidad de Madrid
Futbolistas del Albacete Balompié
Futbolistas del Aris Salónica Fútbol Club
Futbolistas del Club Gimnàstic de Tarragona en los años 2000
Futbolistas del Ontinyent Club de Futbol
Nacidos en Alcorcón

redpajama_set_name: RedPajamaWikipedia


text:
USDA Inspection Report: 19 Jul 2011
Violation: 381.66(b)
Citation: July 19, 2011 12:11 hours While performing an unscheduled, 03C02, raw, not ground, inspection procedure of mechanically separated young turkey (MST) product inside the compartment where it is produced and packaged in its immediate and shipping containers, I observed that one (1) clear plastic bag containing approximately fifteen (15) pounds of finished product appeared warm to my touch. I inserted a bi-metal mechanical stem thermometer provided to me by the establishment that had been calibrated yesterday, 07/18/2011, into the center of this product. The thermometer registered a temperature of sixty-five (65) degrees Fahrenheit (F). The plant's written HACCP plan identifies [redacted]. I immediately alerted the firm's processing co-manager, [redacted] who confirmed my findings, of the noncompliance verbally. Mr. [redacted] arrested production of MST, applied his regulatory control tag to the affected product, and directed another employee to move it directly into the freezer. These observations constitute a failure to comply with the United States Code of Federal Regulations, Title 9, Chapter III, Animals and Animal Products, Part 381, Poultry Products Inspection Regulations, Section 66(b). The establishment's HACCP Director, [redacted] was notified of the noncompliance verbally. Federal regulations regarding product temperatures and chilling and freezing procedures are mandated by United States law and enforced by FSIS field personnel to prevent or reduce to an acceptable level the outgrowth of any spoilage and pathogenic microorganisms that may be present in product. These regulations are intended to promote product wholesomeness and protect consumer health. This document serves as written notification that failure to comply with regulatory requirements may result in additional regulatory and/or administrative action(s).
381.66(b)(1) General chilling requirements, except for ratites. All poultry that is slaughtered and eviscerated in the official establishment shall be chilled immediately after processing so that the internal temperature is reduced to 40 °F. or less, as provided in paragraph (b)(2) of this section unless such poultry is to be frozen or cooked immediately at the official establishment. Eviscerated poultry to be shipped from the establishment in packaged form shall be maintained at 40 °F. or less, except that during further processing and packaging operations, the internal temperature may rise to a maximum of 55 °F.: Provided, That immediately after packaging, the poultry is placed under refrigeration at a temperature that will promptly lower the internal temperature of the product to 40 °F. or less, or the poultry is placed in a freezer. Poultry which is to be held at the plant in packaged form in excess of 24 hours shall be held in a room at a temperature of 36 °F. or less.
Next Report: USDA Inspection Report: 19 Jul 2011
Previous Report: USDA Inspection Report: 18 Jul 2011

redpajama_set_name: RedPajamaCommonCrawl


text:
They used 'em, you reeled: the year's most overused phrases
Green cloud-as-a-service, anyone?
By John K. Waters 29 Dec 2008 at 16:02
Credit crunch and economic meltdown aside, if 2008 is remembered for anything in tech it will be for the domination of the phrase "cloud computing". The "cloud" was seized on by start-ups and tech giants rushing to catch the next wave or remain relevant.
The "cloud" didn't own the entire mind-share market in 2008, though. Here is our list of tech terms that were so overused and misapplied during the last 12 months that they began to lose their meaning.
The industry rushed to wrap itself in the misty folds of "cloud computing" this year with a veritable fervor. Amazon, Google, Computer Associates, Microsoft, IBM, Oracle, and VMware all announced cloud computing initiatives, and Citrix, Sun Microsystems, Hewlett-Packard, Cisco, Intuit, Symantec, and CloudNine are expected to do so shortly. But what is it, exactly? Software-as-a-service? Utility computing? Anything running on a browser outside the firewall? We're not saying that "cloud computing" doesn't exist or is wrong. More than $30 billion worth of software (by some estimates) was aimed at the amorphous mass in 2008. But we are wondering whether anyone really knows what it is.
The term was coined by tech-book publishing and events generalissimo Tim O'Reilly in 2004 to characterize technologies, concepts, or websites focused on dynamic content, social mobilization, and user collaboration. It made this list because of the naming convention it provoked. It wasn't sufficient that Web 2.0 covered a whole brace of technologies, it was tacked onto so many other things: enterprise 2.0, CRM 2.0, marketing 2.0 and so on. And now we've got the endless installments. This year saw the first Web 3.0 conference and expo. Can Web 4.0, 5.0, or 3.1 be far behind? The next web is all about extracting meaning from the vast fogbank of web-based unstructured content. Sort of. Or maybe it's about "collaborative filtering," or "the post-keyword economy." And do we call it Web 3.0, the Intelligent Web, or the Semantic Web? In truth, Web 2.0 remains loosely defined - which makes it easy to tack onto everything from "enterprise" to "email."
Fill-in-the-blank-as-a-Service
Software-as-a-Service is a nice, relatively neatly defined term. It generally refers to a model of software deployment in a hosted environment and provided as a service via the internet. The concept was honed by Salesforce.com, but then expanded by that company with "Platform-as-a-Service," which spawned Infrastructure-as-a-Service, which begat Communication-as-a-Service, which spun off Monitoring-as-a-Service. And yes, Wikipedia now lists "EaaS (Everything-as-a-Service) as a legitimate acronym for the concept of "being able to call up re-usable, fine-grained software components across a network. Wikipedia adds that it's a subset of cloud computing. Head hurt yet?
Agile software development methodologies are finally gaining the purchase they deserve in enterprise development shops, but the term "agile" was so overused that the agilistos were all but driven to capitalize references to Agile methods. "Agile modeling" is a legitimate expansion of the term, to be sure, but how about "agile enterprise management" and "agile project management?" It seems as though every business application now guarantees to create an "agile enterprise." Online advertisers are encouraged to practice "agile marketing." We now have "agile infrastructures" and "agile service oriented architectures", "agile platforms" and "agile consulting" ,"agile testing" and even "agile IT". What we need is an agile editor with an agile red pen.
Yes, former US vice president Al Gore's slide show of Florida under water scared everybody into "going green" this year - or at least saying they will. And yes, "green" can fairly be defined as meaning "environmentally friendly." But as a label, the term is as watery as a melting glacier, and it also offers some obfuscating cover for vendors. Is a product's low power output a flaw or an energy-saving feature? Could a workforce layoff be spun as "green?" Should virtualization systems get a "green" tag because they consolidate servers, conserving sometimes enormous amounts of power? (That one works for us.) How about software re-use? (Maybe not.) The term "green IT" emerged, and "green tech" newsletters are appearing that will either result in a quantification of exactly what "green" means when applied to computing hardware and software, or a further dilution. Cross your fingers. ®
It's 2018 so, of course, climate.news is sold to climate change deniers
Oh, and vaccines.news? Yep, anti-vaxxers. The same guys
You're about to gouda major change in Microsoft cloud security after Redmond agrees to go Dutch on data
Will take the GDPR hit for all cloud biz so you don't have to
Weather forecasters are STILL banging on about 5G clashing with their sensors. As if climate change is a big deal
Analysis Now gimme that 4K HD live stream of kittens
Analysts get hot under collar as ex-Oracle cloud guru ditches corporate wardrobe for Google
But Chocolate Factory hopes Kurian's business chops will help win over the enterprise
Amazon, Google, Microsoft: Who had the best year in cloud in 2019?
Analysis We pick one technology highlight for each of the Big 3
Problems at Oracle's DynDNS: Domain registration customers transferred at short notice, nameserver records changed
Must have missed Oracle's December memo: 'It is now time that we part ways with this business'
Google rolls out Android Easter Egg for Europe – a Microsoft antitrust-style browser, search engine choice box
Now how about we forget these fines, eh, mes amies? Meine Freunde? Mis amigos?
Facebook, Microsoft, Google among tender, caring tech giants on UK internet safety board
The kids are in good hands


Every time I've been on crutches, I've wanted to get off them as fast as possible and find the nearest dumpster to throw them into. Just in thinking about the injuries in our immediate family in the last twenty years, we've had a high ankle sprain, a ruptured achilles tendon, five broken arms, a couple of concussions, and a few other injuries that required medical attention. My guess is that this is probably a higher than average frequency of injury, and yet, not once did we think, "we better hold on to those crutches — we're going to need them again." Think about it — the odds of needing them again in the next six to twelve months are darn near astronomical!
Are you a family of traveling acrobats?
Haha! Just normal active children!


text:
Лаурит — мінерал, сульфід рутенію RuS2 з групи піриту.

Опис
Утворює ізоморфний ряд з ерлікманітом. Звичайні домішки осмію (Os), родію, іридію і заліза, в незначній мірі заміщають Ru. Сингонія кубічна, дідодекаедріческій вид симетрії. Кристали рідкісні і дрібні, форма кристалів кубічна, октаедричні, пентагон-додекаедріческой; зазвичай спостерігається у вигляді дрібних округлих зерен. Ізотропний. У кислотах не розчиняється.

Поширення
Зустрічається в ультраосновних магматичних комплексах і похідних від них розсипних родовищах. Вперше був виявлений в 1866 р. в Борнео, Малайзія.

Знахідки: у Росії — Александрів лог (Н.Тагил, Середній Урал), комплекс Нурали (Башкирія, Південний Урал), Мончегорськ (Кольський півострів), масив Інаглі (Алданский щит, Красноярський край) і маса Кондер (Алданський щит, Хабаровський край), інші знахідки — Бушнельд (Трансвааль, ПАР); Борнео, Малайзія; о. Сулавесі, Індонезія; Благоєвградське родовище, Болгарія; Баула комплекс (Орісса, Індія); район Бу-Аззер, Марокко.

Див. також
 Список мінералів

Примітки

Література

Посилання
 Лаурит

Мінерали рутенію
Сульфіди (мінерали)
Мінерали, названі на честь людей


text:
Some groups say 'Fifty Shades' endorses sexual violence
Religious and others say book series, film degrading to women
Some groups say 'Fifty Shades' endorses sexual violence Religious and others say book series, film degrading to women Check out this story on thenorthwestern.com: http://oshko.sh/1E7Czau
Carolyn Thompson, Associated Press Published 9:27 a.m. CT Feb. 13, 2015
"Fifty Shades of Grey" is getting a big thumbs-down from religious and other groups who say it's degrading to women and endorses sexual violence. One social media campaign is encouraging movie-goers to instead give their ticket and popcorn money to women's shelters. Author EL James says no woman wants to read about abuse, and that everything that happens is safe and consensual.(Photo: AP)
BUFFALO, N.Y. – It hasn't even opened but already "Fifty Shades of Grey" is getting a big thumbs-down from religious and other groups who say it's degrading to women and endorses sexual violence.
One social media campaign is encouraging movie-goers to instead give their ticket and popcorn money to women's shelters.
Even as screenings sell out in advance, critics, including the American Family Association and National Center on Sexual Exploitation, are pushing for boycotts.
One group in Madison, Wis., is planning to picket outside a Thursday premier.
Author EL James, who wrote the erotic trilogy that launched the film, has heard the backlash and says the critics have it all wrong. She says no woman wants to read about abuse, and that everything that happens is safe and consensual.
Read or Share this story: http://oshko.sh/1E7Czau
The Grand Oshkosh's 2019-20 season lineup includes The Four Phantoms
What you need to know about Fourth of July fireworks in the Oshkosh area
Dead Horses opening for The Who, headlining Pabst
Lifest turns 20: What you need to know
Curtis and Loretta performing in Mount Morris
It's OK to enjoy a pint while checking out this beer history book


Claire always seems stressed out.
I'll make sure Glenn finds out.
Trey was dressed in casual clothing.
Bruce stopped to put on his shoes.
Slartibartfast isn't good at driving.
Sherman was certainly enjoying himself.
Marco took a couple of steps back.
Wendell promised to send the check by mail.
Margie had plenty of money to burn.
Tell Hume not to be late.
Ozan won't come if it rains.
I have to wake Andy up.
I don't believe I know Olson.
Gilles left after he had lunch.
Gill played a Spanish folk tune on his English horn at a Chinese restaurant in France.
Johnny doesn't stand a chance of winning.
Raymond knew there had to be a better way.
Hirofumi has to have an operation on his back.
Miriam is watching a movie.
This situation would suit Jeremy.
Kenneth and John aren't brothers.
Dale never cooks on Sunday.
Do you think Philip will do what we've asked him to do?
Gene wanted this to be a surprise.
Bruno insisted on his innocence.
You have to stop clinging to Claire.


Free and open to all students, faculty, staff, and community members/guests. Prior registration is not required, and participation is on a first come, first served basis. Participants are invited to arrive early to secure a spot.


Conversion of seemingly abandoned property is not without the law, however there are inherent differences as to how best to remove or despatch such property, while considering the enduring proprietary rights of the original owners. In a matter concerning a number of goods of varying value, the claimants sought damages for loss, when after giving ample notice for their removal, the recent freehold purchasers took steps to enforce their rights to enjoyment of the land now owned.
Under a conveyance dated May 2 1994, the respondents purchased land from the claimant's mother, on condition that time be given for the removal of specific items owned by her son and daughter-in law. With an express threshold of July 31 1994 for all items outstanding, the claimants removed a portion of the items listed, after which no attempts were made to recover the remainder.
And so upon expiration of the agreed threshold, the respondents proceeded to both remove and where possible, sell the items either privately for profit, or by way of scrap, with the remaining few items kept under secure storage.
However in 'Is Divesting Abandonment Possible at Common Law' (1984) by A.H. Hudson, it was argued that abandonment through intention was sufficient enough to warrant acquisition by those taking new ownership, (otherwise known as 'divesting abandonment') which in effect, created further confusion as to how best to ascertain when property has been lawfully abandoned.
Thus with close examination of the rights afforded both parties, the court held that the items retained and sold or disposed of, were subject to five distinct groups, within which three were estopped from right of claim, damages for conversion were awarded at $300 for the item sold privately and the final group remained abandoned unless agreed otherwise.


Dig into that ice and defend every corner, no matter how many rushes or dekes come your way. The Bauer LS5G goalie edge goal runner is a higher quality black steel that is compatible with all SUPREME and VAPOR goal skate models. And thanks to their new carbon coating, they're +4mm taller than LS3G, giving you a competitive edge.


Luca's Glacier office is located near Cornell Creek off the Mt. Baker Highway. Luca has created a rustic, spa-like atmosphere at her Glacier studio. As you drive up the lane there is a beautiful view of Church Mountain and Mt. Baker with goats, sheep and chickens grazing along the driveway. Luca's studio is above Cornell Creek with a fantastic view of Church Mountain and beautiful Cedar and Maple trees. Her office was remodeled using local and recycled materials including the Cedar tree that was leaning on the cabin before the remodel.
These prices are for payment at time of service.


1) Kanban, 2) 5S, 3) Visual Workplace, 4) The Big Room (Product Management, Development, QA, etc…) — how to best plan and coordinate between all stakeholders, 5) SMED, 6) 5 Why's, 7) TPM. This is an Epic-sized question, I know, but I think sharing your knowledge will help all of us tremendously. Thanks so much!
Mary Poppendieck: An epic-sized question indeed! I'll do just a brief comment on each one, and then refer you to my most recent book, Implementing Lean Software Development: From Concept to Cash, for more on some of them.
1. Kanban. The Kanban of Software development is the index card. Stories are written on cards, estimated and selected at the iteration planning meeting, posted in the team room, updated when the story is being worked on and when it is done.
2. 5S's. Apply the 5s's to the server which stores the code and associated documentation, to desktop environments used by more than one person, and to the code base. We have examples in our new book.
3. Visual Workspace. There are three aspects to a visual workspace – the Kanban card (index card) which tells people what needs to be done, the Andon, or signal that something is wrong (eg. lighting up a red light when the build breaks), and big visible charts which tell everyone how things are going. We also have a section on this in our book.
4. The Big Room, or Obeya. Take a look at the video "21st Century Jet" (KTCS, Seattle) and you will see good examples of the Big Room in action during the development of the Boeing 777 in the 1990's. This isn't a new idea, but it certainly is a good one.
5. SMED, or Single Minute Set-up. The time it takes to test and deploy a release is the set-up time of software development. Many companies take so long to test software that releases are very far apart, and every effort is made to stuff as much as possible into each big-batch release. Some companies release to production several times a day (anti-virus software comes to mind) – they have SMED figured out.
6. 5 Why's. Root Cause Analysis for any problem is a fundamental skill that all teams need to learn. First we have to implement a Stop-the-Line mentality with test-driven development and continuous integration, so that we find and fix most defects instead of putting them on a rework list. Only then can we start using the 5 Why's to discover the root cause of the remaining problems that occur.
7. TPM or Total Preventative Maintenance. In software development, we call this refactoring. We keep on improving the design of the code base to keep it healthy and prevent it from calcifying and becoming a jungle that can no longer be maintained. Legacy code is code that has not had regular TPM.
Mark's comments: I'm sure there are great applications of lean methods and lean management to software development efforts, but I think we should be careful about looking to force fit specific lean tools. I think Mary's book title gets it right: From Concept to Cash. That's always the goal of lean and TPS, reducing time to cash. I wouldn't force fit kanban, for example, because Mary's rationale for using kanban doesn't really resonate with me, or it doesn't sound like true kanban. But, I can absolutely see applications of 5S, visual management, etc.
But, the real key, I think is the problem solving methodologies (such as the 5 Why's) and "respect for people", getting the most out of the smart programmers that you've hired. I used to work in a software company and, it was sad, that the coders were the "operators" of the company. They weren't necessarily listened to or respected (outwardly, at least) any more than the operators I worked with back at General Motors. The company I worked for created software for lean manufacturing environments and, ironically enough, we didn't use any lean methods internally in the design or development of our software. Wasted opportunity there.
1. Is the team focused on delivering increments of real value to end customers – and does everyone understand what that really means?
2. Is the team a Whole Team – composed of everyone necessary to deliver value to the ultimate customer?
3. Does the team reliably and repeatedly delivers on its promises?
Hi Biklu – I think you should post your question on the shmula website, you're more likely to get an answer from Mary there.


Nine sets set into place.
Set, a mathematic notion, a musical notion, a collection of distinct objects.
Set, a bunch, a collection of compiled differences.
Set, something to start in motion or to become solidified.
Set relates to the aspect of putting differences together, both physically and virtually. Placing objects or concepts into sets is a tool to make sense of the world. We break with these categories and re-set their elements, creating worlds that exist beyond these categories and that in turn can shape our world as it is.


text:
Q: C# ComboBox removing and adding Im trying to populate 5 different comboboxes with the same datasource. The datasource is from a class list with values like this (the values that arent displaymember im using to populate text-boxes adjacent to the combobox):
StandardList.Add(new Standard() { ID = 1, number = 91632, credits = 4,
uniEntrance = "Y", assessmentType = "Ext", standardType = "AS" });

This is how I have populated each combobox:
cboNumber1.BindingContext = new BindingContext();
 cboNumber1.ValueMember = "ID";
 cboNumber1.DisplayMember = "number";
 cboNumber1.DataSource = StandardList;
 cboNumber1.Refresh();

When I select an item from one particular combobox, I want to remove that same item from the remaining comboboxes, and then re add it to each combobox if that item is deselcted in the focussed combobox. I have not figured out how to 're add' yet, however the 'removing' part works for every item except when I try to select the LAST item in the combobox using
StandardList.RemoveAt(cboNumber1. SelectedIndex);

it comes up with "ArgumentOutOfRangeException". My question is how do I get around this? Also if I select a particular item in the focussed combobox, and it removes that same item from each remaining combobox, how would I re-add that particular item back, at the same position, to each combobox if I deselected that particular item in the focussed combobox?
This is my first post so sorry for any bad practice. Also please bear in mind im still a highschool student so my c# knowledge is not very broad and my coding practices may be inefficient/bad. I would appreciate any answers/solutions in simple terms even if it means inefficiencies. Thanks.

A: On Selection change of the 1st combo box try to set the filtered DataSource of other combo boxes by using "Where" of list class.
like:
StandardList.Where(item => item.ID != cboNumber1.SelectedItem.Value);
This will return a filtered list, assign this list to other combo boxes.
This will work for you. I guess..

redpajama_set_name: RedPajamaStackExchange


text:
Paa () is a 2009 Indian Hindi-language comedy-drama film directed by R. Balki, starring Amitabh Bachchan, Abhishek Bachchan, and Vidya Balan. The film is inspired by the 1996 Hollywood film Jack as per some reports and is based on the relationship of a boy with a rare genetic condition known as progeria and his parents. Amitabh Bachchan and Abhishek Bachchan, in real life, are father and son respectively, but in Paa, they played opposite roles. The film was released worldwide on 4 December 2009. Veteran composer Ilaiyaraaja scored the music. The film was critically acclaimed in India and fared well at the box office. Despite a warm reception from Indian film critics, the film received mixed reviews from overseas film critics, according to the websites Metacritic and Rotten Tomatoes.
Amitabh Bachchan received his third National Film Award for Best Actor at the 57th National Film Awards for his performance and his fifth Filmfare Award for Best Actor and Vidya Balan got her first Filmfare Award for Best Actress.

Plot
Auro (Amitabh Bachchan) is an intelligent and witty 12-year-old boy with an extremely rare genetic disorder called progeria. Mentally he is twelve and very normal, but physically he looks five times older. In spite of his condition, Auro is a very happy boy. He lives with his mother Vidya (Vidya Balan), who is a Gynaecologist. Amol Arte (Abhishek Bachchan) is a young, flamboyant politician. He is out to prove to the world that "politics" is not a bad word. He is a man with a mission. Auro is Amol's son; however, Vidya conceals this from him. Amol meets Auro when he visits Auro's school as a chief guest. He comes on the occasion of a competition on the "visionary of India". Amol decides Auro as the winner, impressed by the white globe he made. But being seen with such a prominent politician Auro is found by the media. The next day the media tries to enter his school. Auro, annoyed at this, sends him an e-mail, which says "I hate you". Amol reads it and obtains a restraining order from the High Court stating that nobody can disturb him without permission. Auro, relieved, tells him of his desire to visit the president's house. But due to Amol's political issues, he fails to show up on the appointed day. Auro, however, loses confidence in him but later agrees to go to Delhi with him although he now knows that Amol is his father. Though Amol does not know that Auro is his son, he takes him to Delhi to see the president's house. Auro says that he still needs to forgive Amol for his first mistake (not accepting him), but he doesn't tell him what it is. When on his 13th birthday he is in hospital he tells his father that he, Auro, is his father's mistake. Auro tries to get his mother and father back together, but Vidya resists, still hurt by the fact that Amol wanted her to have an abortion when they first found out she was pregnant. Amol realizes his mistake though, and proposes to Vidya, as he is still in love with her. He stays by Auro's side when he finds out that Auro is his son. Auro's health begins to deteriorate as he reaches his 13th birthday, his physical defects catching up. However, he is finally able to reunite his mother and father once again as Vidya gives in to her feelings for Amol and her motherly love for Auro. They perform the first wedding rites in the hospital in front of their dying son, implying that they will do the rest later. Auro, succumbing to his disease, says his last words "Maa" to Vidya and "Paa" to Amol before dying with a satisfied smile. The movie ends in the rain with Vidya mourning Auro's death as Amol comforts her as she remembers Auro dancing.

Cast
 Amitabh Bachchan as Auro Arte
 Vidya Balan as Dr. Vidya Bharadwaj, Auro's mother
 Abhishek Bachchan as Amol Arte, Auro's father
 Paresh Rawal as Kaushal Arte, Auro's paternal grandfather
 Arundhati Nag as Bhumi Bharadwaj, Auro's maternal grandmother
 Satyajit Sharma as Jaikirt
 Sachin Parikh as Vidya's patient
 Prateek Katare as Vishnu
 Taruni Sachdev as Soumini "Somi", Auro's classmate
 Olivier Lafont as Sagar
 Aalekh Kapoor as Raj

Production

Casting
The film had Amitabh Bachchan playing the role of a child who is suffering from Progeria, a genetic disorder which leads to quick acceleration of ageing process in children. Abhishek Bachchan, Amitabh's real-life son, played the role of his father.

Vidya Balan was the only choice for the mother's role. Arundathi Nag, the wife of late Kannada actor-director Shankar Nag was asked to play the role of Vidya's mother (Bachchan's maternal grandmother).

Filming
Most of the parts were shot in Lucknow and some parts of the film were shot in UK and Malaysia. A small portion of the filming was done at Cambridge. The clock of Corpus Christi College and courtyard of St. John's College have been shown in a song sequence. The film was also shot in Taiping, Malaysia. The King Edward VII school was actually one of the typical Malaysian schools.

One of the notable things in the movie was Amitabh's prosthetic make up. It was done by Hollywood's Christien Tinsley (famous for his work in The Passion of the Christ, Catwoman and other films) and Dominie Till of The Lord of the Rings film trilogy fame.

There was a plan to make a sequel named Maa, but Balki stopped it. In the words of Balki, "My main aim was not to make a film on progeria. My main motive behind making Paa was to reverse the roles of Amitabh and Abhishek. I decided to do something like this because once I was with both of them and I saw Abhishek behaving in a very matured manner and Amitabh, behaving as a kid. It was then that this idea struck me."

Paa was Abhishek Bachchan's first venture into producing films for his family company AB Corp. Ltd. Abhishek not only was one of the lead actors in Paa, but was the main hands-on producer in charge of the film's budget, marketing, and the entire production of the film. It took hours for Amitabh Bachchan to put on his makeup and to take it off.

Soundtrack

The soundtrack (songs and the background score) was scored by veteran composer Ilaiyaraaja.The lyrics were penned by Swanand Kirkire. "Halke Se Bole" is based on the Tamil song "Putham Pudhu Kaalai" from his 1980 film Alaigal Oivathillai. "Gumm Summ Gumm" is based on the Malayalam song "Thumbi Vaa" which Ilaiyaraaja had composed for the 1982 Malayalam film Olangal. The song "Mere Paa" is based on his Tamil song "Kaatru Vizhi", from Balu Mahendra's film Adhu Oru Kana Kaalam. The song has an eclectic mix of Irish and Tamil Folk music, both seamlessly fused to create a soothing melody that appears as a leitmotif, in the film's theme music.

Awards and nominations

 Won – Matri Shree Media Award for Best Film: 2010 – R. Balki

References

External links
 Official website

2000s Hindi-language films
2009 films
Films featuring a Best Actor National Award-winning performance
Films featuring a Best Supporting Actress National Film Award-winning performance
Films scored by Ilaiyaraaja
Films shot in Lucknow
Films set in Lucknow
Films directed by R. Balki
Indian drama films
Films that won the National Film Award for Best Make-up
Best Hindi Feature Film National Film Award winners
2009 drama films
Hindi-language drama films


text:
Q: python program bezier function So I am trying to program a bezier curve using python, and unlike previously posts I have been able to find, I need to program It in such a way, that the summation adjust for how many splines there is, since I need to be able to remove or add splines.
I am basing my programming on this wiki http://en.wikipedia.org/wiki/B%C3%A9zier_curve right after the headline "Explicit definition"
so far this is what I have made
from __future__ import division
import math
import numpy as np
from pylab import*

fact = math.factorial
def binormal(n,i):
    koef = fact(n)/float((fact(i)*fact(n-i)))
    return koef

def bernstein(n,i,t):
    bern = binormal(n,i)*(1-t)**(n-i)*(t**i)
    return bern

f = open('polaerekoordinator.txt','r')
whole_thing = f.read().splitlines()
f.close() #these are the coordinates I'm am trying to use for now
#0.000 49.3719597
#9.0141211 49.6065178
#20.2151089 50.9161568
#32.8510895 51.3330612
#44.5151596 45.5941772
#50.7609444 35.3062477
#51.4409332 23.4890251
#49.9188042 11.8336229
#49.5664711 0.000

alle = []

for entry in whole_thing:
    alle.append(entry.split(" "))

def bezier(t): #where t is how many points there is on the bezier curve
    n = len(alle)
    x = y = 0
    for i,entry in enumerate(alle):
        x +=float(entry[0])*bernstein(n,i,t)+x
    for i,entry in enumerate(alle):
        y +=float(entry[1])*bernstein(n,i,t)+y
    return x,y

bezier(np.arange(0,1,0.01))

my problem right now is that I need to do a summation of the x and y coordinates, so they become something like this
y = [y0, y0+y1, y0+y1+y2, y0+y1+y2+...+yn]

and the same for x
any pointers?

A: I think you can use np.cumsum http://docs.scipy.org/doc/numpy/reference/generated/numpy.cumsum.html:
>>>y = np.arange(0,1,0.1)
>>>[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
>>>y_cum = np.cumsum(y)
>>>[ 0.   0.1  0.3  0.6  1.   1.5  2.1  2.8  3.6  4.5]

Edit:
Using your example coordinates I get the following outputs:
x,y = bezier(np.arange(0,1,0.01))
plot(x,y)

 plot(np.cumsum(x),np.cumsum(y))

Assuming this is what you are looking for!

A: I'm not very clear on what're you trying to accomplish, but it's probably something like this:
for i, v in enumerate(y):
    y2.append(sum(y[:i+1]))

Demo:
>>> y = [1, 2, 3]
>>> y2 = []
>>> for i, v in enumerate(y):
    y2.append(sum(y[:i+1]))

>>> y2
[1, 3, 6]
>>>

Or, the shortcut using list comprehension:
y2 = [sum(y[:i+1]) for i,_ in enumerate(y)]

Well, hope it helps!


text:
Live Review: This Will Destroy..
#SufjanWeek: Collaborations
Outside Lands announces their ..
Sufjan Stevens has collaborated with plenty of people in his career. His flexibility has allowed him to explore many different genres and some in particular stand out more than others. Did we miss your favorite? Tweet us and we'll RT you! Use the hashtag #SufjanWeek
[symple_divider style="solid" margin_top="20px" margin_bottom="20px"]
When it was first announced that he was releasing a full length record with Son Lux and Serengeti as Sisyphus (formerly s/s/s), I was more than excited. Son Lux is one of the more exciting producers around right now and Serengeti is a breath of fresh air in the world of hip hop. Combine the three and you get Sisyphus, an inspiring album that doesn't quite fully belong in any single genre. There's always at least one Sisyphus track in any party playlist I make.
[symple_spacing size="20px"]
There's always something special to be expected from two close friends working together. That has always been the case with Sufjan and the hilarious Rosie Thomas. She's done it all with him, it seems – opened for his shows as her comedic alter ego Sheila Saputo, played in his backing band, written and recorded beautiful songs with him.
Nico Muhly and Bryce Dessner
I was hoping a proper recording of the Planetarium series would see the light of day, but alas, for now it shall be kept ingrained within the brains of those lucky enough to attend the shows. Even so, the footage available on YouTube is enough to convince me this is something worth waiting for.
Cat Martino
The lovely Cat Martino has been provided her backing vocals to Sufjan's music for years, but in this track, he stays in the shadows as her amazing voice takes center stage.
The National, St. Vincent, etcetera
Seeing Sufjan on stage with the always impressive The National makes me feel all warm and fuzzy. Can you imagine being in a more talented circle of friends? St. Vincent aka Annie Clark hops on stage with them too from time to time and she has toured with Sufjan before doing backing vocals and such. The talented DM Stith has done the same and donned neon things on him for the Age of Adz tour. Talented people attract their own kind and the results are often worth noting.
#SufjanWeek
We're talking about Sufjan Stevens all week in celebration of his new record Carrie & Lowell out on March 31. Follow our posts and share your favorite Sufjan song with us for a chance to win a copy of the album in vinyl or CD.
Asthmatic Kitty, Bryce Dessner, Cat Martino, DM Stith, Nico Muhly, Serengeti, Sisyphus, Son Lux, St. Vincent, Sufjan Stevens, Sufjan Week, The National
The National to play the Troubadour on October 16 to Launch the Thousand Girls Initiative
Eaux Claires 2015: A moving and transcendental weekend adventure
Eaux Claires 2015: Playlist


Japanese researchers have discovered a process to turn stem cells into cochlear (inner ear) cells. This breakthrough could lead to the replacement of damaged haircells in the cochlea reversing previously untreatable hearing loss. They believe that they may be able to deliver a treatment in five to ten years, however, first they have to identify a way of delivering the cells to the cochlea safely and effectively.
The initial research is based around finding a cure for a specific type of congenital (from birth) hearing loss caused by a genetic mutation. The work, which is being carried out in a laboratory at Juntendo University in Tokyo, Japan, aims to correct a mutation which accounts for deafness or hearing loss for one in a thousand children.
In some parts of the world, mutations of this gene are responsible for as many as half the instances of congenital hearing loss. Professor Kazusaku Kamiya and his team have engineered and grown stem cells to replace human cochlear cells without this mutation. Hereditary hearing loss is often caused by a genetic mutation in the hair cells of the ear, which are found in the inner ear, or cochlea, and are the sensory receptors of sound. Acquired sensorineural hearing loss is caused by damage to the very same hair cells.
Professor Kazusaku Kamiya, a specialist in ear diseases who is leading the research, said: "I am very excited by what we have done. We hope this work will lead to a cure for a form of hereditary deafness.
The key will be to find a safe and effective way to deliver these new cochlear stem cells to the cochlea. One possibility is through injection into the cochlea, however, it will have to be done surgically. While the breakthrough brings us a massive step forward towards curing hearing loss, there will still need to be delivery methods designed and clinical testing to be undertaken.
It will be a step by step process, because even if the researchers can get the cells into the ear and it leads to the growth of new inner ear haircells. We don't know if those cells will act as normal passing sound information to the brain. However, within the next few years we may well have answers to all those questions.


Things do not look good for President Barack Obama based on the newest Rasmussen Reports daily Presidential Tracking poll, which shows Mitt Romney with 50 percent of the vote compared to the president's 43 percent. This is Mr. Romney's first time hitting the 50 percent mark and his largest lead to date.
Rasmussen attributes Mr. Romney's rise to dissatisfaction with the state of the economy in the wake of last week's disappointing jobs report. According to Rasmussen, 48 percent of voters say the president is doing a poor job handling the economy compared to just 37 percent who say he's doing a good or excellent job.


text:
Growth Architecture
Book Beate to Speak
Work with Beate 1-on-1
Train with Beate
Connect With Beate Now!
Please join our complimentary program
The Inevitable Recovery – Rebuild Your Business Only Better TODAY.
Getty Images Race To The Bottom
by Beate Chelette | Growth Architecture | 12 comments
Recently Getty Images announced the availability of over 3 Million images for free to anyone who wants them. I had to stop and pause. Generally speaking I have no issue to voice my opinion, but in this case I had a feeling that there was more to it. Something didn't add up. I wondered WHY would an image business give away images for free? It just didn't make sense.
As a blogger I admit that access to what I thought were "free" images is very exciting. The images aren't really on my website, they are embedded and link right back to Getty. Secondly I must say that even if I upset a content creator now, the images in the free database are not the best of Getty. Take a look for yourself. http://www.gettyimages.com/creative/frontdoor/embed
No matter how much our industry dislikes Getty Images and can blame them rightfully so for their part in the rapid decline of image valuation – they are anything but stupid. There had to be something about this move. And it wasn't until I read Rohn Engh's piece that he sent to me that I had my big AHA moment.
Below is the article that is reprinted with permission from Rohn. After you read his piece I'd like to hear your opinion on it. Obviously Getty would never give away their most valuable images – there had to be an ulterior motive. Do you think this is it? (BC)
Amazon.com's Next Competitor? by Rohn Engh
The Great Getty Give-Away
How GettyImages' Give-Away Program Will Overtake The Direct Marketing World
Definition: Marketing is the art of supplying products to people when you know their buying preferences. It's an easy sell. On the other hand, it's very hard to sell someone (cold call) if you don't know their buying preferences.
GettyImages.com has solved the problem. The company has ownership of millions of photos. They have figured out how to turn their massive old-school type of photo agency into a giant internet advertising network.
GettyImages (soon to be called by a different name), has devised a method of learning the preferences of a social site, blog/website or an individual. A lot of revenue can result from their simple formula.
This is how the formula works:
What's the most popular entity on the social sites? Text. But what's the next most important? Images. Are there many social sites? Blogs and websites? You bet. Millions, soon to be trillions.
Getty has figured out that if they give away an embedded image for any editorial use, in return for information about your personal preferences, or your website's preferences, and your visitors' preferences, they have the makings of the most monumental advertising, public relations, list brokerage, catalog direct marketing Goliath in the world. (Amazon: Watch out!)
When it gets into high gear, the initial rollout plan will be to insert ads in the embedded photo and to collect user information. This is a legitimate scam/phishing idea and you are part of it if you cooperate. And what blogger or minor website owner or social media site wouldn't want to join in if you wanted to attract visitors with the best professional photos around?
A little history.
In August 2012, The Carlyle Group, the world's second-largest private-equity firm, bought GettyImages from Hellman & Friedman LLC in a deal valued at $3.3 billion. But things have not been going well. Too many competitors like Fotalia and Shutterstock have been eating away at the potential profits. In September, 2013, Moody's Investors Service placed GettyImages on review for a possible reduction in their ranking because of weaker-than-expected revenue. Uh-oh.
RUN FASTER AMAZON! …GETTYIMAGES IS CATCHING UP
But the clever out-of-the-box marketers at Carlyle looked beyond the obvious horizon. At least 35 million images were sitting in the vault, going nowhere but out-of-date. The boys and girls at Carlyle knew what they were doing when they saw the internet marketing potential. "If YouTube can do it, so can we." They figured if they handled this right, these images could become "little vehicles" to capture the preferences of any person or company who would ask to use one of their free images on their social site. Getty would contribute images, free, and in return the recipients would contribute their preferences. And to top off the prize, Getty would partner with third-parties that would eventually embed advertisements in the image frame to become the leading internet direct marketing network in the world. ( No I wasn't listening in at the local bar in Manhattan after-hours. It all just sounds like someone, sooner or later, was going to come up with this quasi-democratic-free-enterprise idea.)
There's more. Stock photographers are not generally aware of the Big Dollars that can come in from Big Data on the internet. A tenet of professional internet marketing gurus is that you can gauge your annual gross profit by how many names you have on your 'hot' mailing list – it's generally considered that each name represents from 50 cents to $1 annually, even though you may sell products or services to only 20 to 30% of your list.
The big payoff for Getty: Getty Images will soon enter the Mailing List brokerage business. Millions of dollars are in the mix. No, they don't exactly sell your name and information. I explain how big business can capitalize on brokering a mailing list in a couple of recent reports I published earlier this month. You'll find them on my PhotoStockNOTES blog: http://tinyurl.com/ng94y43 ( March 7th 2014 issue), and http://board.photosource.com/read.php?1,12851
Well, we must congratulate the Carlyle Group in moving the Getty Images stock agency into the new millennium to a strategy for new profits. Perhaps it's time to take stock here – literally — with Getty Images, or whatever their new internet marketing service is going to be called. Looks like they'll be a winner.
While long-time Getty Images photographers may at first rail against their photos being freely distributed (for editorial use), photographers when all is said and done will benefit from increased exposure for their images and credit lines. Their name and images will attract wider attention with the increased opportunities for use, also drawing no doubt on many of their images that may have been sleeping in the Getty Images basement files. Such exposure is priceless.
Let's all watch as this nascent story unfolds. –RE
What do you think about Rohn's take. Is Getty finding a new monetization scheme?
Samual	on April 5, 2014 at 7:07 am
"photographers may at first rail against their photos being freely distributed when all is said and done will benefit from increased exposure" – this argument, usually presented by a photographer's cheap clients, is probably the worst carrot ever presented to creatives. What they get is exposure to more clients who see their time as valueless, and then expect their time, effort & talent for free, again – detrimental, not beneficial in the least.
Geof Kirby	on April 5, 2014 at 8:52 am
I agree with Samuel. Can anyone explain why someone who uses free photography should suddenly or ultimately see any point in paying for photography. It shouldn't be forgotten that users of free stuff represent the bottom of the value chain for photographers. The effect will be opposite to Rohn's take. It will further devalue photography.
Jerry	on April 5, 2014 at 3:04 pm
Any photographer out there that think's this might be good for them, think again.
Wall Street has created a way to make the almighty dollar "hum."
This isn't about images as much as it is about money. Who gets hurt in the process, Wall Street could care less.
Photographers, if you want to protect your self and the industry, I might suggest putting the pressure to your representatives and senators.
Darren	on April 5, 2014 at 4:00 pm
The only party that benefits out of this is getty – they may well become the go to source for free stock images, they will make money from the marketing data analytics they will gather. Will they share some of that new revenue stream with the photographers work who enable that. I would guess not.
Thomas Aaron	on April 6, 2014 at 7:22 am
I am new to the world of photography, so my opinion here is of limited value. But I am a successful business man, and being a service provider (i.e. dog trainer) I understand (at least in my primary industry) the pitfall to giving stuff away for free.
Here's what I'm thinking:
1. There probably should be some humongous class-action lawsuit against Getty to get them to stop destroying the profitability of the industry in general. And maybe a boycott against them too.
2. What they are doing will at least temporarily derail the stock photography niche, and any other niche in which the images are non-personal to the buyer. I do think there will always be some demand for fresh images, as Getty's images will be spread all over cyberworld. I know some top-end graphic designers / website designers / branding experts who insist on hiring photographers to create images for them rather than buying everything from stock sites.
3. The most open-to-newcomers niches for photographers probably will be those that are inherently personal to the buyer: weddings, family portraits, pet photography.
I personally think is a crying shame if this is really what Getty is going to do. It *must* run afoul of some law — monopolies? I don't know.
George	on April 6, 2014 at 9:26 am
The notion that this is going to be beneficial to the photographer, is utter nonsense!
This is just another example how Getty always seem to find new ways of abusing their content contributors.
It is sad to see how every segment of stock photography been systematically destroyed over the past decade.
Miguel	on April 8, 2014 at 10:07 am
Interesting, but… the sell to photographers, and this is no exception, is that in the long run they will benefit from the "Trickle Down" effect.
This is always the line used by those who think they're smarter than the rest of us. It's the sales pitch by the high end auto manufacturers, the boutique fashion shops and the over-priced cafe shop.
The truth is that it doesn't trickle down in any meaningful way and the wealth is increasingly concentrated at the top, while those doing the actual valuable work are taken advantage of. Like most Professional Photographers, if I got a dollar for everytime I'm told that a client is doing me a favour by providing me with long term exposure…
How much IS a photograph worth if it's given away for free?
Del Munroe	on April 9, 2014 at 1:22 pm
When there is a race to the bottom: don't compete. Withhold your images. Don't sell.
Boycot. There is always an alternative. I've often wondered about an established cooperative
for photographers run by photographers. OMG with todays technology I'm absolutely certain
something can be established. A few full time employees will need to be hired for logistics and management etc. Take back the power. Getty cannot sell images if the stream of images gets cut off. Think Unions between 1890 and 1920's. This is exactly why they were formed.
Rohn Engh	on April 13, 2014 at 3:43 pm
Whoa! Consider this. Public relations is big business in the USA. "Exposure" is valuable to businesses, and especially to artists and photographers. For those photographers who have been accepted in the Getty fold, it's a professional measure of their talent. Art directors know this. Congratulations.
FACEBOOK, Twitter, Google+, LinkedIn et al – offer free exposure to photographers and I assume that's why those photographers who use these social sites know how valuable this exposure is to them. GettyImages is now a social site. I would think the Getty photographers (and those who are not on the Getty agency) who are grumbling about this new phase of Getty would welcome this new (free) exposure for their talent. I have published a new piece on Getty's new data mining service which I called "AJAX". I hope you'll look it up. http://www.photosource.com/makeover.html
Jeanette Vonier	on April 17, 2014 at 8:54 am
Getty has become the MacDonalds of Image Sales in terms of what they pay the creators.
Photographers may work for 10-20 years to develop their craft. They must invest all the time and energy to create these images on speculation. They don't even get to keep their copyright. Finally they have no retirement program or benefits. I don't see this as any kind of win. Yes we should boycott but even more we must join hands and educate the newbies about the consequences of supporting this kind of greed. I am personally very tired of companies like Getty who look to create these huge monopolies at the expense of the middle class jobs and income. We are becoming a third world country with a two class system. The haves and have nots.
Lee Salem	on April 25, 2014 at 9:44 am
If I wasn't otherwise convinced that Rohn's writing was on the side of the "good guys," that last paragraph seems to be right out of Getty's press release. Photographers will benefit from exposure??? Good pun, but lousy concept. As noted by the respondents above, experience tells us it rarely works that way. The images Getty chooses are those that aren't moving-making sales worth keeping them on their servers. So, they "monetize" them through the data they can collect.The photographers will not receive anything for their efforts in creating the images. If Getty wanted to mollify the victims of this scam on their contributors, they would offer up a fraction of their income from this project and send some money every quarter. But they may have figured the reminder that their contributors are getting ripped off may continue to keep the issue in the news rather than the one-time storm of bad PR they are getting in the photographers' world now. Would that quarterly check for $3.00 make you happy or just pour salt in the wound? I was told in the past that the remunerative life of a photo is less than 6 months before something newer/hipper/more relevant replaces it. While this may have been in the context of celebrity photos, is it that far off from all "sellable" photos? There was a time when great photos could sell for decades but today's media frenzy and massive number of outlets as well as contributors devours the newest images and makes it all "been there, done that." Those 35 million photos are taking up too much space for not returning anything. Getty wins again while contributors lose again.
photobizcoach	on April 25, 2014 at 10:08 am
Good thoughts Lee. I've also had feedback from the attorneys at Nelson McCulloch and there are major contractual issues with this as well.
Balanced Leadership (331)
Growth Architecture (693)
Women's Issues (38)
How to Create a Top Affiliate Website
Stop Making Excuses. How To Start Moving Forward in Business Again
Tips on Growing Your Youtube Channel and Finding Your Niche
Adapting To The Crisis: How To Pivot Business Strategies
Small Business Tips To Disaster Proof Your Business
BEATE CHELETTE
ABOUT GROWTH ARCHITECTURE
Follow Beate
© 2009-2018 Chelette Enterprises, Inc. All rights reserved.
The Women's Code™, ego-RHYTHM™ and Photobizcoach™ are registered trademarks and cannot be used without permission.
Chelette Enterprises, Inc. P.O. Box 1293, Culver City, CA 90232.
https://www.linkedin.com/in/beatecheletteLinkedIn