text:
The Primrose Piano Quartet
Formed in 2004, the Primrose Piano Quartet has established a reputation for superb performances and award winning recordings. Alongside much loved repertoire of Beethoven, Brahms, Schumann, Schubert, Faure and more, The Primrose have received acclaim for reviving unjustly neglected works by early 20th century British composers such as Dunhill, Quilter, Bax and Frank Bridge. They have commissioned leading composers of our time, including the late Sir Peter Maxwell Davies whose piano quartet was written for them in 2008.
"The playing is selflessly beautiful… everything seems to be just right." The Strad
"The Primrose enjoys an enviable reputation, not just as a standard bearer for the mainstream repertoire for piano quartet, but also for a string of recordings of lesser-known works, and a vigorous commitment to commissioning new music." read more
"Inspired music played with complete control, imagination, and deep insight, well judged balance and ensemble – a truly satisfying performance…" read more
"…beautifully performed. Andrew Fuller's richly expressive and idiomatic cello solo elicited playing of extraordinary tenderness from the rest of the ensemble, with Susanne Stanzeleit's delicate phrasing particularly enchanting." read more
13/09/2019 : West Meon Festival
more concerts...


I was born in Canada and have lived in Sutton, Peterborough and Toronto.
I have my AMI Assistants certificate from Foundation for Montessori Education. I have taught for 32 years. I am also a Registered Psychodynamic Psychotherapist. I studied at the School for Psychotherapy and Emotional Bodywork and have been working with clients in private and group sessions since 1994. Prior to working with children, I spent 7 years in Geriatric Care and then began my studies in psychology and early childhood education.
I am I am intuitive, empathetic and highly sensitive...I often can "hear" what is not being said!
If you knew me really well, you would know the number of times I have seen Rod Stewart in concert...Hint: More than 17!!
Maggie May is my adorable rescue cat who just happens to have the same initials as Maria Montessori and my favourite rap artist. Her name represents my love of Margaret Trudeau, the month my son was born and so much more...so ask me about my cat and you will get to know my sense of humour and the passion I feel for the Montessori environment!!


text:
The Divine Comedy Clive James
The Divine Comedy by Clive James
Very GoodGood
Renowned critic and poet Clive James presents the crowning achievement of his career: a monumental translation of Dante's Divine Comedy. Shortlisted for the Costa Poetry Award 2013.
The Divine Comedy Summary
`Finally I realised that I had been practising for this job every time I wrote a quatrain . . . I had spent all this time - the greater part of a lifetime - preparing my instruments'
The Divine Comedy is the precursor of modern literature, and Clive James's new translation - his life's work and decades in the making - presents Dante's entire epic poem in a single song.
While many poets and translators have attempted to capture the full glory of The Divine Comedy in English, many have fallen short. Victorian verse translations established an unfortunate tradition of reproducing the sprightly rhyming measures of Dante but at the same time betraying the strain on the translator's powers of invention. For Dante, the dramatic human stories of Hell were exciting, but the spiritual studies of Purgatory and the sublime panoramas of Heaven were no less so.
In this incantatory new translation, James - defying the convention by writing in quatrains - tackles these problems head-on and creates a striking and hugely accessible translation that gives us The Divine Comedy as a whole, unified, and dramatic work.
The Divine Comedy Reviews
'Clive James's new translation is wonderfully unstuffy and infects fresh life back into the poem.' Mary Beard, Observer Best Holiday Reads 2013 'An outstanding achievement ... He restores the sense of drama, the colours and music of Dante's vision ... Clive James has now given us a translation worthy of this and any other time; and a great piece of literature in its own right' - Robert Fox, Evening Standard 'an extraordinary verse-rendering -- the fruit of many years' work -- of Dante's The Divine Comedy. According to TS Eliot, this is the only book in the western tradition that surpasses Shakespeare. It is typical of James's chutzpah that he has not only tackled this Everest of translation, but has scrambled to the summit in triumph ... The result is a revelation. The reader is swept up in the drama of Inferno ... The tempo and texture of the poem has an inevitable majesty, but there is also a dancing levity that is suited to James and his joking seriousness' Robert McCrum, Guardian 'Clive James comes to the Comedy with two important attributes: many years study of the poem and an impressively accomplished verse technique' - Sean O'Brien, Independent Book of the Week 'Like most successful translations, there is a sense of the personal throughout... the poetry is certainly here, spurring the reader to learn more.' The Times Saturday Review 'This is the translation that many of us had abandoned all hope of finding. Clive James's version is the only one that conveys Dante's variety, depth, subtlety, vigor, wit, clarity, mystery, and awe in rhymed English stanzas that convey the music of Dante's triple rhymes. This book lets Dante's genius shine through as it never did before in English verse, and is a reminder that James' poetry has always been his finest work.' Edward Mendelson, Columbia University 'Clive James' translation of The Divine Comedy is a remarkable achievement: not a scowling marble Dante of sublime set-pieces but a living, breathing poet shifting restlessly through a dizzying succession of moods, perceptions, and passions. Under James' uncanny touch, seven long centuries drop away, and the great poem is startlingly fresh and new.' Stephen Greenblatt, Harvard University, author of The Swerve
About Clive James
Clive James is the author of more than forty books. As well as essays, he has published collections of literary and television criticism, travel writing, verse and novels, plus five volumes of autobiography, Unreliable Memoirs, Falling Towards England, May Week Was In June, North Face of Soho and The Blaze of Obscurity. As a television performer he appeared regularly for both the BBC and ITV, most notably as writer and presenter of the Postcard series of travel documentaries. His popular Radio 4 series A Point of View has been published in volume form. He has also published several poetry collections, a verse commentary of Proust, Gate of Lilacs, and a translation of Dante's The Divine Comedy. In 1992 he was made a Member of the Order of Australia and in 2003 he was awarded the Philip Hodgins memorial medal for literature. He holds honorary doctorates from Sydney University and the University of East Anglia. In 2012 he was appointed CBE and in 2013 an Officer of the Order of Australia. Dante was a major Italian poet of the Middle Ages. His Divine Comedy is widely considered the greatest work of Italian literature.
Short-listed for Costa Poetry Award 2014 (UK)
Customer Reviews - The Divine Comedy

redpajama_set_name: RedPajamaCommonCrawl


text:
package org.apache.hadoop.hive.accumulo.predicate;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.ByteArrayOutputStream;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.apache.accumulo.core.client.IteratorSetting;
import org.apache.accumulo.core.data.Key;
import org.apache.accumulo.core.data.Range;
import org.apache.commons.codec.binary.Base64;
import org.apache.hadoop.hive.accumulo.columns.ColumnEncoding;
import org.apache.hadoop.hive.accumulo.columns.ColumnMapper;
import org.apache.hadoop.hive.accumulo.predicate.compare.CompareOp;
import org.apache.hadoop.hive.accumulo.predicate.compare.DoubleCompare;
import org.apache.hadoop.hive.accumulo.predicate.compare.Equal;
import org.apache.hadoop.hive.accumulo.predicate.compare.GreaterThan;
import org.apache.hadoop.hive.accumulo.predicate.compare.GreaterThanOrEqual;
import org.apache.hadoop.hive.accumulo.predicate.compare.IntCompare;
import org.apache.hadoop.hive.accumulo.predicate.compare.LessThan;
import org.apache.hadoop.hive.accumulo.predicate.compare.LessThanOrEqual;
import org.apache.hadoop.hive.accumulo.predicate.compare.LongCompare;
import org.apache.hadoop.hive.accumulo.predicate.compare.NotEqual;
import org.apache.hadoop.hive.accumulo.predicate.compare.PrimitiveComparison;
import org.apache.hadoop.hive.accumulo.predicate.compare.StringCompare;
import org.apache.hadoop.hive.accumulo.serde.AccumuloSerDeParameters;
import org.apache.hadoop.hive.accumulo.serde.TooManyAccumuloColumnsException;
import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
import org.apache.hadoop.hive.ql.exec.SerializationUtilities;
import org.apache.hadoop.hive.ql.index.IndexSearchCondition;
import org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc;
import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc;
import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc;
import org.apache.hadoop.hive.ql.plan.TableScanDesc;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPAnd;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqual;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqualOrGreaterThan;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqualOrLessThan;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPGreaterThan;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPLessThan;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPNotNull;
import org.apache.hadoop.hive.serde.serdeConstants;
import org.apache.hadoop.hive.serde2.SerDeException;
import org.apache.hadoop.hive.serde2.lazy.LazyUtils;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.JavaIntObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.util.StringUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;

import com.google.common.base.Joiner;
import com.google.common.collect.Lists;

public class TestAccumuloPredicateHandler {

  private AccumuloPredicateHandler handler = AccumuloPredicateHandler.getInstance();
  private JobConf conf;
  private ColumnMapper columnMapper;

  @Before
  public void setup() throws TooManyAccumuloColumnsException {
    FunctionRegistry.getFunctionNames();
    conf = new JobConf();
    List<String> columnNames = Arrays.asList("field1", "rid");
    List<TypeInfo> columnTypes = Arrays.<TypeInfo> asList(TypeInfoFactory.stringTypeInfo,
        TypeInfoFactory.stringTypeInfo);
    conf.set(serdeConstants.LIST_COLUMNS, Joiner.on(',').join(columnNames));
    conf.set(serdeConstants.LIST_COLUMN_TYPES, "string,string");

    String columnMappingStr = "cf:f1,:rowID";
    conf.set(AccumuloSerDeParameters.COLUMN_MAPPINGS, columnMappingStr);
    columnMapper = new ColumnMapper(columnMappingStr, ColumnEncoding.STRING.getName(), columnNames,
        columnTypes);
  }

  @Test
  public void testGetRowIDSearchCondition() {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "hi");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqual(), children);
    assertNotNull(node);
    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    List<IndexSearchCondition> sConditions = handler.getSearchConditions(conf);
    assertEquals(sConditions.size(), 1);
  }

  @Test()
  public void testRangeEqual() throws SerDeException {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqual(), children);
    assertNotNull(node);
    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    Collection<Range> ranges = handler.getRanges(conf, columnMapper);
    assertEquals(ranges.size(), 1);
    Range range = ranges.iterator().next();
    assertTrue(range.isStartKeyInclusive());
    assertFalse(range.isEndKeyInclusive());
    assertTrue(range.contains(new Key(new Text("aaa"))));
    assertTrue(range.afterEndKey(new Key(new Text("aab"))));
    assertTrue(range.beforeStartKey(new Key(new Text("aa"))));
  }

  @Test()
  public void testRangeGreaterThan() throws SerDeException {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPGreaterThan(), children);
    assertNotNull(node);
    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    Collection<Range> ranges = handler.getRanges(conf, columnMapper);
    assertEquals(ranges.size(), 1);
    Range range = ranges.iterator().next();
    assertTrue(range.isStartKeyInclusive());
    assertFalse(range.isEndKeyInclusive());
    assertFalse(range.contains(new Key(new Text("aaa"))));
    assertFalse(range.afterEndKey(new Key(new Text("ccccc"))));
    assertTrue(range.contains(new Key(new Text("aab"))));
    assertTrue(range.beforeStartKey(new Key(new Text("aa"))));
    assertTrue(range.beforeStartKey(new Key(new Text("aaa"))));
  }

  @Test
  public void rangeGreaterThanOrEqual() throws SerDeException {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqualOrGreaterThan(), children);
    assertNotNull(node);
    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    Collection<Range> ranges = handler.getRanges(conf, columnMapper);
    assertEquals(ranges.size(), 1);
    Range range = ranges.iterator().next();
    assertTrue(range.isStartKeyInclusive());
    assertFalse(range.isEndKeyInclusive());
    assertTrue(range.contains(new Key(new Text("aaa"))));
    assertFalse(range.afterEndKey(new Key(new Text("ccccc"))));
    assertTrue(range.contains(new Key(new Text("aab"))));
    assertTrue(range.beforeStartKey(new Key(new Text("aa"))));
  }

  @Test
  public void rangeLessThan() throws SerDeException {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPLessThan(), children);
    assertNotNull(node);
    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    Collection<Range> ranges = handler.getRanges(conf, columnMapper);
    assertEquals(ranges.size(), 1);
    Range range = ranges.iterator().next();
    assertTrue(range.isStartKeyInclusive());
    assertFalse(range.isEndKeyInclusive());
    assertFalse(range.contains(new Key(new Text("aaa"))));
    assertTrue(range.afterEndKey(new Key(new Text("ccccc"))));
    assertTrue(range.contains(new Key(new Text("aa"))));
    assertTrue(range.afterEndKey(new Key(new Text("aab"))));
    assertTrue(range.afterEndKey(new Key(new Text("aaa"))));
  }

  @Test
  public void rangeLessThanOrEqual() throws SerDeException {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqualOrLessThan(), children);
    assertNotNull(node);
    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    Collection<Range> ranges = handler.getRanges(conf, columnMapper);
    assertEquals(ranges.size(), 1);
    Range range = ranges.iterator().next();
    assertTrue(range.isStartKeyInclusive());
    assertFalse(range.isEndKeyInclusive());
    assertTrue(range.contains(new Key(new Text("aaa"))));
    assertTrue(range.afterEndKey(new Key(new Text("ccccc"))));
    assertTrue(range.contains(new Key(new Text("aa"))));
    assertTrue(range.afterEndKey(new Key(new Text("aab"))));
    assertFalse(range.afterEndKey(new Key(new Text("aaa"))));
  }

  @Test
  public void testDisjointRanges() throws SerDeException {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqualOrLessThan(), children);
    assertNotNull(node);

    ExprNodeDesc column2 = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null,
        false);
    ExprNodeDesc constant2 = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "bbb");
    List<ExprNodeDesc> children2 = Lists.newArrayList();
    children2.add(column2);
    children2.add(constant2);
    ExprNodeDesc node2 = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPGreaterThan(), children2);
    assertNotNull(node2);

    List<ExprNodeDesc> bothFilters = Lists.newArrayList();
    bothFilters.add(node);
    bothFilters.add(node2);
    ExprNodeGenericFuncDesc both = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPAnd(), bothFilters);

    String filterExpr = SerializationUtilities.serializeExpression(both);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    Collection<Range> ranges = handler.getRanges(conf, columnMapper);

    // Impossible to get ranges for row <= 'aaa' and row >= 'bbb'
    assertEquals(0, ranges.size());
  }

  @Test
  public void testMultipleRanges() throws SerDeException {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqualOrGreaterThan(), children);
    assertNotNull(node);

    ExprNodeDesc column2 = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null,
        false);
    ExprNodeDesc constant2 = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "bbb");
    List<ExprNodeDesc> children2 = Lists.newArrayList();
    children2.add(column2);
    children2.add(constant2);
    ExprNodeDesc node2 = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPLessThan(), children2);
    assertNotNull(node2);

    List<ExprNodeDesc> bothFilters = Lists.newArrayList();
    bothFilters.add(node);
    bothFilters.add(node2);
    ExprNodeGenericFuncDesc both = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPAnd(), bothFilters);

    String filterExpr = SerializationUtilities.serializeExpression(both);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    List<Range> ranges = handler.getRanges(conf, columnMapper);
    assertEquals(1, ranges.size());
    Range range = ranges.get(0);
    assertEquals(new Range(new Key("aaa"), true, new Key("bbb"), false), range);
  }

  @Test
  public void testPushdownTuple() throws SerDeException, NoSuchPrimitiveComparisonException,
      NoSuchCompareOpException {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.intTypeInfo, "field1", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.intTypeInfo, 5);
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqual(), children);
    assertNotNull(node);
    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    List<IndexSearchCondition> sConditions = handler.getSearchConditions(conf);
    assertEquals(sConditions.size(), 1);
    IndexSearchCondition sc = sConditions.get(0);
    PushdownTuple tuple = new PushdownTuple(sConditions.get(0), handler.getPrimitiveComparison(sc
        .getColumnDesc().getTypeString(), sc), handler.getCompareOp(sc.getComparisonOp(), sc));
    byte[] expectedVal = new byte[4];
    ByteBuffer.wrap(expectedVal).putInt(5);
    assertArrayEquals(tuple.getConstVal(), expectedVal);
    assertEquals(tuple.getcOpt().getClass(), Equal.class);
    assertEquals(tuple.getpCompare().getClass(), IntCompare.class);
  }

  @Test(expected = NoSuchPrimitiveComparisonException.class)
  public void testPushdownColumnTypeNotSupported() throws SerDeException,
      NoSuchPrimitiveComparisonException, NoSuchCompareOpException {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.floatTypeInfo, "field1", null,
        false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.floatTypeInfo, 5.5f);
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqual(), children);
    assertNotNull(node);
    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);
    List<IndexSearchCondition> sConditions = handler.getSearchConditions(conf);
    assertEquals(sConditions.size(), 1);
    IndexSearchCondition sc = sConditions.get(0);

    handler.getPrimitiveComparison(sc.getColumnDesc().getTypeString(), sc);
  }

  @Test
  public void testPushdownComparisonOptNotSupported() {
    try {
      ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "field1", null,
          false);
      List<ExprNodeDesc> children = Lists.newArrayList();
      children.add(column);
      ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
          new GenericUDFOPNotNull(), children);
      assertNotNull(node);
      String filterExpr = SerializationUtilities.serializeExpression(node);
      conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);
      List<IndexSearchCondition> sConditions = handler.getSearchConditions(conf);
      assertEquals(sConditions.size(), 1);
      IndexSearchCondition sc = sConditions.get(0);
      new PushdownTuple(sc, handler.getPrimitiveComparison(sc.getColumnDesc().getTypeString(), sc),
          handler.getCompareOp(sc.getComparisonOp(), sc));
      fail("Should fail: compare op not registered for index analyzer. Should leave undesirable residual predicate");
    } catch (RuntimeException e) {
      assertTrue(e.getMessage().contains("Unexpected residual predicate: field1 is not null"));
    } catch (Exception e) {
      fail(StringUtils.stringifyException(e));
    }
  }

  @Test
  public void testIteratorIgnoreRowIDFields() {
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqualOrLessThan(), children);
    assertNotNull(node);

    ExprNodeDesc column2 = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null,
        false);
    ExprNodeDesc constant2 = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "bbb");
    List<ExprNodeDesc> children2 = Lists.newArrayList();
    children2.add(column2);
    children2.add(constant2);
    ExprNodeDesc node2 = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPGreaterThan(), children2);
    assertNotNull(node2);

    List<ExprNodeDesc> bothFilters = Lists.newArrayList();
    bothFilters.add(node);
    bothFilters.add(node2);
    ExprNodeGenericFuncDesc both = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPAnd(), bothFilters);

    String filterExpr = SerializationUtilities.serializeExpression(both);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);
    try {
      List<IteratorSetting> iterators = handler.getIterators(conf, columnMapper);
      assertEquals(iterators.size(), 0);
    } catch (SerDeException e) {
      StringUtils.stringifyException(e);
    }
  }

  @Test
  public void testIgnoreIteratorPushdown() throws TooManyAccumuloColumnsException {
    // Override what's placed in the Configuration by setup()
    conf = new JobConf();
    List<String> columnNames = Arrays.asList("field1", "field2", "rid");
    List<TypeInfo> columnTypes = Arrays.<TypeInfo> asList(TypeInfoFactory.stringTypeInfo,
        TypeInfoFactory.intTypeInfo, TypeInfoFactory.stringTypeInfo);
    conf.set(serdeConstants.LIST_COLUMNS, Joiner.on(',').join(columnNames));
    conf.set(serdeConstants.LIST_COLUMN_TYPES, "string,int,string");

    String columnMappingStr = "cf:f1,cf:f2,:rowID";
    conf.set(AccumuloSerDeParameters.COLUMN_MAPPINGS, columnMappingStr);
    columnMapper = new ColumnMapper(columnMappingStr, ColumnEncoding.STRING.getName(), columnNames,
        columnTypes);

    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "field1", null,
        false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqualOrLessThan(), children);
    assertNotNull(node);

    ExprNodeDesc column2 = new ExprNodeColumnDesc(TypeInfoFactory.intTypeInfo, "field2", null,
        false);
    ExprNodeDesc constant2 = new ExprNodeConstantDesc(TypeInfoFactory.intTypeInfo, 5);
    List<ExprNodeDesc> children2 = Lists.newArrayList();
    children2.add(column2);
    children2.add(constant2);
    ExprNodeDesc node2 = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPGreaterThan(), children2);
    assertNotNull(node2);

    List<ExprNodeDesc> bothFilters = Lists.newArrayList();
    bothFilters.add(node);
    bothFilters.add(node2);
    ExprNodeGenericFuncDesc both = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPAnd(), bothFilters);

    String filterExpr = SerializationUtilities.serializeExpression(both);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);
    conf.setBoolean(AccumuloSerDeParameters.ITERATOR_PUSHDOWN_KEY, false);
    try {
      List<IteratorSetting> iterators = handler.getIterators(conf, columnMapper);
      assertEquals(iterators.size(), 0);
    } catch (Exception e) {
      fail(StringUtils.stringifyException(e));
    }
  }

  @Test
  public void testCreateIteratorSettings() throws Exception {
    // Override what's placed in the Configuration by setup()
    conf = new JobConf();
    List<String> columnNames = Arrays.asList("field1", "field2", "rid");
    List<TypeInfo> columnTypes = Arrays.<TypeInfo> asList(TypeInfoFactory.stringTypeInfo,
        TypeInfoFactory.intTypeInfo, TypeInfoFactory.stringTypeInfo);
    conf.set(serdeConstants.LIST_COLUMNS, Joiner.on(',').join(columnNames));
    conf.set(serdeConstants.LIST_COLUMN_TYPES, "string,int,string");
    String columnMappingStr = "cf:f1,cf:f2,:rowID";
    conf.set(AccumuloSerDeParameters.COLUMN_MAPPINGS, columnMappingStr);
    columnMapper = new ColumnMapper(columnMappingStr, ColumnEncoding.STRING.getName(), columnNames,
        columnTypes);

    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "field1", null,
        false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "aaa");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqualOrLessThan(), children);
    assertNotNull(node);

    ExprNodeDesc column2 = new ExprNodeColumnDesc(TypeInfoFactory.intTypeInfo, "field2", null,
        false);
    ExprNodeDesc constant2 = new ExprNodeConstantDesc(TypeInfoFactory.intTypeInfo, 5);
    List<ExprNodeDesc> children2 = Lists.newArrayList();
    children2.add(column2);
    children2.add(constant2);
    ExprNodeDesc node2 = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPGreaterThan(), children2);
    assertNotNull(node2);

    List<ExprNodeDesc> bothFilters = Lists.newArrayList();
    bothFilters.add(node);
    bothFilters.add(node2);
    ExprNodeGenericFuncDesc both = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPAnd(), bothFilters);

    String filterExpr = SerializationUtilities.serializeExpression(both);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);
    List<IteratorSetting> iterators = handler.getIterators(conf, columnMapper);
    assertEquals(iterators.size(), 2);
    IteratorSetting is1 = iterators.get(0);
    IteratorSetting is2 = iterators.get(1);

    boolean foundQual = false;
    boolean foundPCompare = false;
    boolean foundCOpt = false;
    boolean foundConst = false;
    for (Map.Entry<String,String> option : is1.getOptions().entrySet()) {
      String optKey = option.getKey();
      if (optKey.equals(PrimitiveComparisonFilter.COLUMN)) {
        foundQual = true;
        assertEquals(option.getValue(), "cf:f1");
      } else if (optKey.equals(PrimitiveComparisonFilter.CONST_VAL)) {
        foundConst = true;
        assertEquals(option.getValue(), new String(Base64.encodeBase64("aaa".getBytes())));
      } else if (optKey.equals(PrimitiveComparisonFilter.COMPARE_OPT_CLASS)) {
        foundCOpt = true;
        assertEquals(option.getValue(), LessThanOrEqual.class.getName());
      } else if (optKey.equals(PrimitiveComparisonFilter.P_COMPARE_CLASS)) {
        foundPCompare = true;
        assertEquals(option.getValue(), StringCompare.class.getName());
      }

    }
    assertTrue(foundConst & foundCOpt & foundPCompare & foundQual);

    foundQual = false;
    foundPCompare = false;
    foundCOpt = false;
    foundConst = false;
    for (Map.Entry<String,String> option : is2.getOptions().entrySet()) {
      String optKey = option.getKey();
      if (optKey.equals(PrimitiveComparisonFilter.COLUMN)) {
        foundQual = true;
        assertEquals(option.getValue(), "cf:f2");
      } else if (optKey.equals(PrimitiveComparisonFilter.CONST_VAL)) {
        foundConst = true;
        byte[] intVal = new byte[4];
        ByteBuffer.wrap(intVal).putInt(5);
        assertEquals(option.getValue(), new String(Base64.encodeBase64(intVal)));
      } else if (optKey.equals(PrimitiveComparisonFilter.COMPARE_OPT_CLASS)) {
        foundCOpt = true;
        assertEquals(option.getValue(), GreaterThan.class.getName());
      } else if (optKey.equals(PrimitiveComparisonFilter.P_COMPARE_CLASS)) {
        foundPCompare = true;
        assertEquals(option.getValue(), IntCompare.class.getName());
      }

    }
    assertTrue(foundConst & foundCOpt & foundPCompare & foundQual);
  }

  @Test
  public void testBasicOptLookup() throws NoSuchCompareOpException {
    boolean foundEqual = false;
    boolean foundNotEqual = false;
    boolean foundGreaterThanOrEqual = false;
    boolean foundGreaterThan = false;
    boolean foundLessThanOrEqual = false;
    boolean foundLessThan = false;
    for (String opt : handler.cOpKeyset()) {
      Class<? extends CompareOp> compOpt = handler.getCompareOpClass(opt);
      if (compOpt.getName().equals(Equal.class.getName())) {
        foundEqual = true;
      } else if (compOpt.getName().equals(NotEqual.class.getName())) {
        foundNotEqual = true;
      } else if (compOpt.getName().equals(GreaterThan.class.getName())) {
        foundGreaterThan = true;
      } else if (compOpt.getName().equals(GreaterThanOrEqual.class.getName())) {
        foundGreaterThanOrEqual = true;
      } else if (compOpt.getName().equals(LessThan.class.getName())) {
        foundLessThan = true;
      } else if (compOpt.getName().equals(LessThanOrEqual.class.getName())) {
        foundLessThanOrEqual = true;
      }
    }
    assertTrue("Did not find Equal comparison op", foundEqual);
    assertTrue("Did not find NotEqual comparison op", foundNotEqual);
    assertTrue("Did not find GreaterThan comparison op", foundGreaterThan);
    assertTrue("Did not find GreaterThanOrEqual comparison op", foundGreaterThanOrEqual);
    assertTrue("Did not find LessThan comparison op", foundLessThan);
    assertTrue("Did not find LessThanOrEqual comparison op", foundLessThanOrEqual);
  }

  @Test(expected = NoSuchCompareOpException.class)
  public void testNoOptFound() throws NoSuchCompareOpException {
    handler.getCompareOpClass("blah");
  }

  @Test
  public void testPrimitiveComparsionLookup() throws NoSuchPrimitiveComparisonException {
    boolean foundLong = false;
    boolean foundString = false;
    boolean foundInt = false;
    boolean foundDouble = false;
    for (String type : handler.pComparisonKeyset()) {
      Class<? extends PrimitiveComparison> pCompare = handler.getPrimitiveComparisonClass(type);
      if (pCompare.getName().equals(DoubleCompare.class.getName())) {
        foundDouble = true;
      } else if (pCompare.getName().equals(LongCompare.class.getName())) {
        foundLong = true;
      } else if (pCompare.getName().equals(IntCompare.class.getName())) {
        foundInt = true;
      } else if (pCompare.getName().equals(StringCompare.class.getName())) {
        foundString = true;
      }
    }
    assertTrue("Did not find DoubleCompare op", foundDouble);
    assertTrue("Did not find LongCompare op", foundLong);
    assertTrue("Did not find IntCompare op", foundInt);
    assertTrue("Did not find StringCompare op", foundString);
  }

  @Test
  public void testRowRangeIntersection() throws SerDeException {
    // rowId >= 'f'
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "f");
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(column);
    children.add(constant);
    ExprNodeDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqualOrGreaterThan(), children);
    assertNotNull(node);

    // rowId <= 'm'
    ExprNodeDesc column2 = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "rid", null,
        false);
    ExprNodeDesc constant2 = new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, "m");
    List<ExprNodeDesc> children2 = Lists.newArrayList();
    children2.add(column2);
    children2.add(constant2);
    ExprNodeDesc node2 = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPEqualOrLessThan(), children2);
    assertNotNull(node2);

    List<ExprNodeDesc> bothFilters = Lists.newArrayList();
    bothFilters.add(node);
    bothFilters.add(node2);
    ExprNodeGenericFuncDesc both = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPAnd(), bothFilters);

    String filterExpr = SerializationUtilities.serializeExpression(both);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    // Should make ['f', 'm\0')
    List<Range> ranges = handler.getRanges(conf, columnMapper);
    assertEquals(1, ranges.size());
    assertEquals(new Range(new Key("f"), true, new Key("m\0"), false), ranges.get(0));
  }

  @Test
  public void testRowRangeGeneration() throws SerDeException {
    List<String> columnNames = Arrays.asList("key", "column");
    List<TypeInfo> columnTypes = Arrays.<TypeInfo> asList(TypeInfoFactory.stringTypeInfo,
        TypeInfoFactory.stringTypeInfo);
    conf.set(serdeConstants.LIST_COLUMNS, Joiner.on(',').join(columnNames));
    conf.set(serdeConstants.LIST_COLUMN_TYPES, "string,string");

    String columnMappingStr = ":rowID,cf:f1";
    conf.set(AccumuloSerDeParameters.COLUMN_MAPPINGS, columnMappingStr);
    columnMapper = new ColumnMapper(columnMappingStr, ColumnEncoding.STRING.getName(), columnNames,
        columnTypes);

    // 100 < key
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.intTypeInfo, "key", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.intTypeInfo, 100);
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(constant);
    children.add(column);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPLessThan(), children);
    assertNotNull(node);

    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    // Should make (100, +inf)
    List<Range> ranges = handler.getRanges(conf, columnMapper);
    Assert.assertEquals(1, ranges.size());
    Assert.assertEquals(new Range(new Text("100"), false, null, false), ranges.get(0));
  }

  @Test
  public void testBinaryRangeGeneration() throws Exception {
    List<String> columnNames = Arrays.asList("key", "column");
    List<TypeInfo> columnTypes = Arrays.<TypeInfo> asList(TypeInfoFactory.intTypeInfo,
        TypeInfoFactory.stringTypeInfo);
    conf.set(serdeConstants.LIST_COLUMNS, Joiner.on(',').join(columnNames));
    conf.set(serdeConstants.LIST_COLUMN_TYPES, "int,string");

    String columnMappingStr = ":rowID#b,cf:f1";
    conf.set(AccumuloSerDeParameters.COLUMN_MAPPINGS, columnMappingStr);
    columnMapper = new ColumnMapper(columnMappingStr, ColumnEncoding.STRING.getName(), columnNames,
        columnTypes);

    int intValue = 100;

    // Make binary integer value in the bytearray
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    JavaIntObjectInspector intOI = (JavaIntObjectInspector) PrimitiveObjectInspectorFactory
        .getPrimitiveJavaObjectInspector(TypeInfoFactory
            .getPrimitiveTypeInfo(serdeConstants.INT_TYPE_NAME));
    LazyUtils.writePrimitive(baos, intValue, intOI);

    // 100 < key
    ExprNodeDesc column = new ExprNodeColumnDesc(TypeInfoFactory.intTypeInfo, "key", null, false);
    ExprNodeDesc constant = new ExprNodeConstantDesc(TypeInfoFactory.intTypeInfo, intValue);
    List<ExprNodeDesc> children = Lists.newArrayList();
    children.add(constant);
    children.add(column);
    ExprNodeGenericFuncDesc node = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
        new GenericUDFOPLessThan(), children);
    assertNotNull(node);

    String filterExpr = SerializationUtilities.serializeExpression(node);
    conf.set(TableScanDesc.FILTER_EXPR_CONF_STR, filterExpr);

    // Should make (100, +inf)
    List<Range> ranges = handler.getRanges(conf, columnMapper);
    Assert.assertEquals(1, ranges.size());
    Assert.assertEquals(new Range(new Text(baos.toByteArray()), false, null, false), ranges.get(0));
  }

  @Test
  public void testNullRangeGeneratorOutput() throws SerDeException {
    // The AccumuloRangeGenerator produces an Object (due to the limitations of the
    // traversal interface) which requires interpretation of that Object into Ranges.
    // Changes in the return object from the AccumuloRangeGenerator must also represent
    // a change in the AccumuloPredicateHandler.
    AccumuloPredicateHandler mockHandler = Mockito.mock(AccumuloPredicateHandler.class);
    ExprNodeDesc root = Mockito.mock(ExprNodeDesc.class);
    String hiveRowIdColumnName = "rid";

    Mockito.when(mockHandler.getRanges(conf, columnMapper)).thenCallRealMethod();
    Mockito.when(mockHandler.generateRanges(columnMapper, hiveRowIdColumnName, root)).thenReturn(null);
    Mockito.when(mockHandler.getExpression(conf)).thenReturn(root);

    // A null result from AccumuloRangeGenerator is all ranges
    Assert.assertEquals(Arrays.asList(new Range()), mockHandler.getRanges(conf, columnMapper));
  }

  @Test
  public void testEmptyListRangeGeneratorOutput() throws SerDeException {
    // The AccumuloRangeGenerator produces an Object (due to the limitations of the
    // traversal interface) which requires interpretation of that Object into Ranges.
    // Changes in the return object from the AccumuloRangeGenerator must also represent
    // a change in the AccumuloPredicateHandler.
    AccumuloPredicateHandler mockHandler = Mockito.mock(AccumuloPredicateHandler.class);
    ExprNodeDesc root = Mockito.mock(ExprNodeDesc.class);
    String hiveRowIdColumnName = "rid";

    Mockito.when(mockHandler.getRanges(conf, columnMapper)).thenCallRealMethod();
    Mockito.when(mockHandler.generateRanges(columnMapper, hiveRowIdColumnName, root)).thenReturn(Collections.emptyList());
    Mockito.when(mockHandler.getExpression(conf)).thenReturn(root);

    // A null result from AccumuloRangeGenerator is all ranges
    Assert.assertEquals(Collections.emptyList(), mockHandler.getRanges(conf, columnMapper));
  }

  @Test
  public void testSingleRangeGeneratorOutput() throws SerDeException {
    // The AccumuloRangeGenerator produces an Object (due to the limitations of the
    // traversal interface) which requires interpretation of that Object into Ranges.
    // Changes in the return object from the AccumuloRangeGenerator must also represent
    // a change in the AccumuloPredicateHandler.
    AccumuloPredicateHandler mockHandler = Mockito.mock(AccumuloPredicateHandler.class);
    ExprNodeDesc root = Mockito.mock(ExprNodeDesc.class);
    String hiveRowIdColumnName = "rid";
    Range r = new Range("a");

    Mockito.when(mockHandler.getRanges(conf, columnMapper)).thenCallRealMethod();
    Mockito.when(mockHandler.generateRanges(columnMapper, hiveRowIdColumnName, root)).thenReturn(r);
    Mockito.when(mockHandler.getExpression(conf)).thenReturn(root);

    // A null result from AccumuloRangeGenerator is all ranges
    Assert.assertEquals(Collections.singletonList(r), mockHandler.getRanges(conf, columnMapper));
  }

  @Test
  public void testManyRangesGeneratorOutput() throws SerDeException {
    // The AccumuloRangeGenerator produces an Object (due to the limitations of the
    // traversal interface) which requires interpretation of that Object into Ranges.
    // Changes in the return object from the AccumuloRangeGenerator must also represent
    // a change in the AccumuloPredicateHandler.
    AccumuloPredicateHandler mockHandler = Mockito.mock(AccumuloPredicateHandler.class);
    ExprNodeDesc root = Mockito.mock(ExprNodeDesc.class);
    String hiveRowIdColumnName = "rid";
    Range r1 = new Range("a"), r2 = new Range("z");

    Mockito.when(mockHandler.getRanges(conf, columnMapper)).thenCallRealMethod();
    Mockito.when(mockHandler.generateRanges(columnMapper, hiveRowIdColumnName, root)).thenReturn(Arrays.asList(r1, r2));
    Mockito.when(mockHandler.getExpression(conf)).thenReturn(root);

    // A null result from AccumuloRangeGenerator is all ranges
    Assert.assertEquals(Arrays.asList(r1, r2), mockHandler.getRanges(conf, columnMapper));
  }
}

redpajama_set_name: RedPajamaGithub


Player changes between data sampled at 2018-08-17 04:17:28 and 2018-08-18 04:18:30, and filtered for at least 3000 total points.
Player Buffy (total points=27650777) status changed from vi to v.
Player Battlestar (total points=9145430) status changed from v to A.
Player xenophon (total points=53849742) status changed from vi to v.
Player diablo666 (total points=98326041) status changed from A to v.
Player Ori (total points=9315551) status changed from vI to v.
Player Ariolc (total points=2166856) status changed from vI to v.
Player Nedw (total points=2013110) status changed from A to i.
Debutante Patrik (status=A) reached 49864 total points (previously 43923).


text:
Q: How to use document.querySelector to search for a pattern match and fill value I have an element in an webpage

id="1253~~0~0~506~13501157_txtValue"

I want to search all element matches beginning with this value 1253 and it should be filled up the value test
For this I am using this following code but it isnt working
document.querySelector('[id^ ='1253']').value = test

Please guide me as to where I am going wrong
Thanks in advance.
-Vicky.

A: Your selector is good but you should either use double quotes (") and single quotes (') or escape your inner single quotes.
Also, if test is not a variable you should surround it with quotes : "test".
As pointed out by @adiga, if you want to match all elements whose id begins with "1253", you should use querySelectorAll() and loop through the results.

document.querySelector("[id^='1253']").value = "test";
//the following line is equivalent
//document.querySelector('[id^=\'1253\']').value = "test";
<input type="text" id="1253~~0~0~506~13501157_txtValue" />

redpajama_set_name: RedPajamaStackExchange


text:
Allia Zobel-Nolan on Great Rescues
August 4th, 2011 § 0 comments § permalink
Received my copy of GREAT RESCUES, a most exquisite book/calendar jammed-packed with irresistible fine-art paintings of cats of all kinds, and wonderous stories about them, painted and penned by BERNADETTE E. KAZMARSKI…I HIGHLY RECOMMEND THIS BOOK; give it 4 paws up. See for yourself @ http://greatrescuescalendar.com/
Yes, you're already there, but please also visit Allia's website, www.alliawrites.com! She's the author of…at last count something like 170 books (probably more by now), including gift books for cat lovers and illustrated children's books, and she's won so many awards you'll just have to go and read about them all. I'm thrilled at her comments!
Ingrid King of The Conscious Cat Reviews "Great Rescues"
I'm a big fan of animal artist and writer Bernadette Kazmarski. Her photographs and cat paintings capture the essence of cats in ways that only a small handful of artists are able to do. Bernadette is a multi-faceted creative spirit: artist, writer, graphic designer, painter, animal advocate, environmentalist. From commissioned pet portraits to animal inspired merchandise ranging from prints to textiles to greeting cards, looking around Bernadette's websites are a feast for the senses.
Read more: Great Rescues: a 16-month cat calendar and gift book | The Conscious Cat.
Chris Davis Blog: Great Rescues Calendar gets a 4 paws-up rating!
"When my Great Rescues Calendar arrived I tore open the package like a kid on Christmas morning!"
Chris Davis, a mentor and inspiration, writes a review of Great Rescues Calendar and Gift Book on her blog: Chris Davis Blog: Great Rescues Calendar gets a 4 paws-up rating!.
A Review by Marion Lane, former editor ASPCA Animal Watch
July 26th, 2011 § 1 comment § permalink
Bernadette Kazmarski calls Great Rescues, her one-woman work of wonders a "calendar," and it is, but that's just for starters. Literally. The first thirty-two pages of the 8"x8" spiral-bound book comprise a sixteen-month calendar that runs from September 2011 to December 2012. Each two-page spread features the true story of one or more rescued cats, together with Bernadette's exquisitely detailed portraits of them (all in all, twenty-two cats are pictured). The calendar pages have room for appointments, some blank lines for notes, a famous feline-friendly quotation, a tip that sets the tone for the month, and more special days that honor cats and other animals than you've ever seen listed in one place.
The middle section of the book contains a few pages to update the rescue stories and discuss the making of the individual portraits, then a dozen pages of resources. A cat rescuer herself for twenty-five years, Bernadette states that the information she has chosen to include is what people most commonly ask about. All the basics are there, and they reflect the central theme of the book—which is the human/cat bond: adoption, routine and emergency veterinary care, spay and neuter, household hazards, pet loss support.
At this point the book becomes a journal. There are forty pages with lines ready to record all the clever things your cats do or to track their growth or maybe chart their veterinary visits and medication schedules. Or not. Here's a different plan: How about committing to one action per day, small or large, in support of cat rescue? S-t-r-e-t-c-h your imagination to come up with as many different actions as possible, maybe even a different one for every day of the year. Bernadette has sprinkled ideas throughout Great Rescues that will spark your creativity.
This book is dedicated to Bernadette's first family of cats. All long since departed from the physical world, she notes that they are made immortal in everything she creates. That's a lot of immortality, as she has drawn the portraits, written the stories, compiled the resources and then designed the thing and finally published it herself. Lovely to look at and read and hold in the hands, Great Rescues is an altogether "up" experience, where people are compassionate and good, and however troubled their beginnings, all cat stories have happy endings.
Former Editor, ASPCA Animal Watch Magazine
Cobleskill, New York
Amy Shojai "Mentions" Great Rescues on her blog today!
Monday Mentions: Cat Art, Dog Sperm Detectors & PhD Sheep « Amy Shojai's Blog.
My colleague Bernadette Kazmarski has published her first book Great Rescues Calendar that sings the praises of the many cats she's met over the years.
And she featured Cooper's portrait!
Amy Shojai, CABC is a certified animal behavior consultant, award winning author, and spokesperson to the pet industry. If you have a library of animal health and behavior books, you'll probably see her name on at least one of them. She is also a founding member of and former president of the Cat Writer's Association, which is how I met her.
Click the link to read more!
Chris Davis of Lighthearted Press Sends Her Comments
An artist friend purchased a calendar and e-mailed her remarks today. I was so excited to hear from a fellow animal artist and author of several books! My portraiture style is very much in the fine art portraiture genre, though I do work in looser styles and different media, but I study the work of other artists all the time to inspire growth and change in my own work.
Chris Davis is one of those artists—I have one of her books, For Every Cat an Angel, which she sent after I lost my Peaches last year. I found her colorful, whimsical style so comforting for its lighthearted nature, and indeed that is the name of Chris' publishing company, Lighthearted Press!
Here is what Chris wrote:
Bernadette, I sat down last night and read your calendar from cover to cover – it's fabulous! Like a good book, I didn't want it to end. Every cat lover should have one of these calendars. The stories are uplifting, and the notes and quotes you put on the calendar pages are helpful and inspiring.
I think you've created something very special here. Your stunning artwork jumps off each page. I enjoyed reading the additional info at the end, where you told more of each heartwarming story.
As an extra special gift, you included all those resources and important info at the back for anyone who shares their life with a cat. What a treasure! I'm delighted with this extraordinary work of art. I think all the love and care you give to your kitties was also given to this calendar…and it shows!
Congratulations, Bernadette – you've got a winner, here!
Cheers, Chris
www.lightheartedpress.com
And please visit Chris' website to see her illustrated books! You'll love them—and she's working on a new one!
Read other reviews on my Reviews page.
Enter to win a calendar, comment on Cat Wisdom 101!
Layla Morgan Wilde, host of Cat Wisdom 101, wrote a review of Great Rescues and you can enter a contest to win one just by commenting on her blog post!
Click this link: Christmas in July Contest
And don't forget to look around and find the interesting and informative things Layla has to offer cat lovers. She was on The Daily Show along with Jackson Galaxy last week!
You are currently browsing the reviews category at Great Rescues Day Book.


text:
Home » Golden Birch Restaurant
Golden Birch Restaurant
Gold as an investment
Of all the rare-earth elements, gold is one of the most prominent as an financial investment. Capitalists typically get gold as a means of diversifying threat, particularly via making use of futures agreements and by-products. The gold market goes through conjecture as well as volatility as are other markets. Compared to various other rare-earth elements made use of for financial investment, gold has actually been one of the most efficient safe haven throughout a number of countries. Golden Birch Restaurant
Gold cost
Gold has been used throughout background as money and also has been a relative requirement for money matchings particular to economic regions or countries, until current times. Numerous European countries carried out gold standards in the last part of the 19th century until these were briefly suspended in the financial crises entailing World War I. After World War II, the Bretton Woods system secured the United States dollar to gold at a rate of US$ 35 per troy ounce. The system existed up until the 1971 Nixon Shock, when the US unilaterally suspended the direct convertibility of the USA dollar to gold and also made the shift to a fiat money system. The last major money to be separated from gold was the Swiss Franc in 2000.
Because 1919 one of the most common criteria for the rate of gold has actually been the London gold taking care of, a twice-daily telephone conference of agents from five bullion-trading firms of the London bullion market. Moreover, gold is traded constantly throughout the globe based on the intra-day area rate, derived from non-prescription gold-trading markets around the world. Golden Birch Restaurant
Affecting variables
Like many commodities, the price of gold is driven by supply and also demand, including speculative demand. However, unlike the majority of various other products, conserving as well as disposal play larger functions in influencing its cost than its intake. Most of the gold ever before extracted still exists in available form, such as bullion as well as mass-produced precious jewelry, with little value over its great weight — so it is almost as fluid as bullion, and also can return onto the gold market. At the end of 2006, it was approximated that all the gold ever mined completed 158,000 tonnes (156,000 lengthy heaps; 174,000 brief loads).
Given the big quantity of gold stored over ground contrasted to the annual production, the cost of gold is mainly impacted by modifications in sentiment, which impacts market supply and also need similarly, instead of on modifications in annual production. According to the World Gold Council, yearly mine manufacturing of gold over the last few years has been close to 2,500 tonnes.About 2,000 tonnes enters into fashion jewelry, industrial and dental manufacturing, as well as around 500 tonnes mosts likely to retail capitalists and also exchange-traded gold funds. Golden Birch Restaurant
Reserve banks and the International Monetary Fund play an important role in the gold cost. At the end of 2004, central banks and official organizations held 19% of all above-ground gold as main gold reserves. The ten-year Washington Agreement on Gold (WAG), which dates from September 1999, limited gold sales by its members (Europe, USA, Japan, Australia, the Financial Institution for International Settlements as well as the International Monetary Fund) to less than 400 tonnes a year. In 2009, this agreement was prolonged for five years, with a restriction of 500 tonnes. European reserve banks, such as the Financial institution of England and also the Swiss National Financial Institution, have been essential vendors of gold over this duration. In 2014, the agreement was extended another 5 years at 400 tonnes per year. In 2019 the contract was not expanded again.
Although reserve banks do not generally announce gold purchases beforehand, some, such as Russia, have actually revealed rate of interest in growing their gold books once more as of late 2005. In early 2006, China, which only holds 1.3% of its reserves in gold, introduced that it was trying to find means to enhance the returns on its official reserves. Some bulls wish that this signals that China might rearrange more of its holdings into gold, according to various other reserve banks. Chinese investors began going after investment in gold as an option to investment in the Euro after the start of the Eurozone crisis in 2011. China has actually since come to be the globe's leading gold customer since 2013. Golden Birch Restaurant
The cost of gold can be influenced by a variety of macroeconomic variables. Such variables include the rate of oil, the use of measurable easing, currency exchange rate motions and also returns on equity markets.
The performance of gold bullion is often contrasted to supplies as different financial investment vehicles. Gold is related to by some as a store of value (without growth) whereas stocks are considered as a return on worth (i.e., development from anticipated genuine rate boost plus returns). Supplies and bonds carry out best in a steady political environment with strong residential property rights and also little chaos. Golden Birch Restaurant
Investing In Precious Metals 2021
Can You Buy Gold With Ira Money
How To Best Invest In Gold


text:
Q: Why can't region and account ID be empty for SQS ARNs? I'm using arn:aws:sqs:::queue_name for my AWS IAM policy, but I receive access denied errors when trying to access the queue from Python's AWS wrapper, boto3.

A: S3 bucket names are unique across all accounts and regions, which means you don't need to specify the region or the account ID. For S3 buckets, you can use the following ARN without issues: arn:aws:s3:::bucket_name. This will apply the ARN to a single bucket with name equal to bucket_name.
However, SQS queue names are neither unique across accounts, nor across regions. That means you either need to specify the exact region or the account ID, or use the wildcard * character, which means the ARN applies to all queues with the same name. I used arn:aws:sqs:*:*:queue_name to apply the ARN to all queues with name equal to queue_name.


text:
Del Shannon, eg. Charles Weedon Westover, född 30 december 1934 i Grand Rapids, Michigan, död 8 februari 1990 i Santa Clarita, Kalifornien, var en amerikansk sångare och gitarrist. Del Shannon var en av poppionjärerna. Typiskt för Shannon var hans falsettröst och förkärleken för att stoppa in ett mellanspel på elektronisk orgel i många låtar.

Biografi
Del Shannon slog igenom 1961 med låten "Runaway" som hamnade överst på såväl den amerikanska Billboard Hot 100-listan som brittiska singellistan. Även uppföljaren "Hats Off to Larry" blev en topp 10-hit. Flera av hans låtar blev större hitlåtar i Europa än i USA. Så blev exempelvis "Hey Little Girl", "The Swiss Maid" (skriven av Roger Miller) och "Two Kinds of Teardrops" alla topp 10-singlar i Storbritannien, medan de i USA endast nådde mediokra placeringar på Billboard-listan. Shannon hade dock även fortsatt framgång i USA med hitsinglarna "Little Town Flirt" (1963) och "Keep Searchin' (We'll Follow the Sun)" (1965).

Shannon träffade The Beatles i England 1963 och hörde dem framföra "From Me to You". Shannon spelade senare in en egen version av låten som gavs ut i USA, vilket blev första gången en Beatleslåt placerade sig på de amerikanska singellistorna.

Efter 1965 års "Stranger in Town" upphörde Shannons storhetstid på listorna, men han var fortfarande populär i framförallt England och Australien. År 1981 hade han en mindre hit med "Sea of Love" som ursprungligen var en hit för Phil Phillips 1959. Det efterföljande albumet Drop Down and Get Me producerades av Tom Petty.

Under påverkan av antidepressiva tabletter begick Shannon självmord genom att skjuta sig med ett 22-kalibrigt gevär 1990. Året före sin bortgång arbetade Shannon på det som kom att bli hans sista album Rock On!. Albumet producerades av Jeff Lynne och Mike Campbell och gavs ut 1991.

Del Shannon blev invald i Rock and Roll Hall of Fame 1999.

Diskografi

 (live)

 (samlingsalbum)

 (8-CD samlingsbox)

Referenser

Noter

Externa länkar

 Del Shannon på Allmusic
 Del Shannon på classicbands.com

Amerikanska musiker under 1900-talet
Amerikanska sångare
Rock and Roll Hall of Fame
Personer från Grand Rapids, Michigan
Musiker som begått självmord
Födda 1934
Avlidna 1990
Män

redpajama_set_name: RedPajamaWikipedia


text:
Home \ University News \ Thomasville Genealogical Library set to move to Thomas University
This architect's conceptual rendering shows the new Smitha Building, which will house the Thomasville Genealogical, History and Fine Arts Library, after renovations.
Thomas University's Main Campus will soon be the new home of the Thomasville Genealogical, History and Fine Arts Library. Formerly located on Broad Street in downtown Thomasville, the library will soon be relocated to the Eugenia P. Smitha Building on TU's Main Campus, located at the intersection of Pinetree Boulevard and Millpond Road in Thomasville.
"We are delighted to have the Thomasville Genealogical Library relocating to Thomas University," said Dr. Gary Bonvillian, TU President. "This is our way of reaching out to the community and providing a service that will help people interested in discovering their roots – an expansion of what we are already doing through our many outreach partnerships in the area."
The Thomasville Genealogical, History and Fine Arts Library is expected to open on TU's Main Campus after renovations are made to the existing Smitha Building, which is accessible by the Millpond Road entrance. Space in the Student Life Center on TU's Magnolia Campus will be renovated to accommodate the art studio and art classroom formerly located in the Smitha Building. The renovations and the moves are made possible by contributions from the Board of Directors of the Thomasville Genealogical, History and Fine Arts Library and the Williams Family Foundation.
"We are meeting with Ray Finger, the architect for renovating the new Genealogy Library location on TU's campus, to design an inviting space that copies architectural features from the previous library location in the historical building downtown and overlooks our beautiful campus," said Dr. Ann Landis, TU Executive Vice President and Provost. "The renovation should be completed by early summer 2016, and the library will open by mid-summer for patrons to again have access to the physical resources and improved technology for electronic genealogical research."
The Smitha Building, which will be the new home to the Thomasville Genealogical, History and Fine Arts Library at TU, has had multiple iterations on the TU Main Campus. After renovation in 1994, it was renamed the Eugenia P. Smitha Building in honor of the TU benefactor. Smitha served on the Board of Trustees from 1976 to 2000 and was named a Trustee Emerita in 2004. She was essential in obtaining recognition from the National Trust for Historic Preservation for Forbes Administration Building at TU. In 1999 Smitha received an Honorary Doctorate of Humane Letters from TU.
"We feel this renovation and housing the Thomasville Genealogical, History and Fine Arts Library are in line with Eugenia P. Smitha's dedication to Thomas University and to the community," Bonvillian said. "We look forward to having the library as part of the TU campus."
Kathy Mills, Director of the Thomasville Genealogical, History and Fine Arts Library, said, "We're just so excited about this move. I just think we're going to get students involved and maybe some of the faculty involved in doing their genealogy. This move will also help with getting our name out there so more people will know about this wonderful resource."
In addition to the new location, moving to TU will also provide an opportunity to expand the Genealogical Library.
"Not only will genealogy patrons continue to have access to all the resources and holdings in the Genealogical Library, but they will have access to additional holdings held by the Thomas University Library, which is just a few steps away," said Lynn Kelly, Director of the Thomas University Library. "That includes access to many more electronic holdings and the TU library's computers."
Plans also include upgrading some of the Genealogical Library's computers, acquiring a new microfilm reader, and having a small room in which to conduct training sessions. Additionally, the move will allow titles in the Genealogical Library to be featured in an online catalog that will be accessible at any time, according to Kelly
"We are privileged to have the opportunity to expand our university Library with the addition of this special library," Landis said. "Not only do we look forward to welcoming existing patrons of the Genealogical Library to Thomas University, but we see this as an opportunity to expand interest in genealogical research and history of the region by connecting the mission of the Genealogical Library with the educational mission and resources of Thomas University."
In the meantime, Mills has a temporary office at 312 N. Broad St. Those interested in researching their genealogy using the Genealogy Library's resources can contact Mills in her temporary office at (229) 226-9640 between 9 a.m. and 3 p.m. Monday through Friday for assistance.


text:
Home / Parenting & Families / Creating Equality at Home: How 25 Couples around the World Share Housework and Childcare
Creating Equality at Home: How 25 Couples around the World Share Housework and Childcare
Creating Equality at Home was a very interesting read. I always enjoy the opportunity to be a fly on the wall in people's daily lives. Case studies about family life are an excellent way to indulge this desire, and Creating Equality at Home has 25 of them. The book takes the reader to Switzerland, Indonesia, Croatia, Honduras, and the USA. It breaks the reader from the dangerous perception that equal gender parenting roles can only be achieved in first world western countries. This collection of case studies makes it clear that equal gender parenting roles are a concern and struggle the world over.
This book is primarily written for an academic audience; however, it is very readable, with each chapter describing a family in a different country and how the adult couple divides household management, professional work, and caring for children. A "day in the life" description comes first, followed by each adult's perspective on their roles, what's important to them and why. Each chapter also contains some information about the country and their policies toward women, men, and family life. It was really fascinating to see how national policies varied, but how across cultures it was the norm for men to do less housework and less care for children. I also found the perspectives and background that the couples brought to make home equality a priority really interesting. Most often both members of the couple had to agree it was a priority and frequent communication was important. Usually both adults also had influence or perspective from their background that made quality important as well. There was something about reading the daily life description, recorded first without interpretation, that made me think about how my family life is divided without judgment.
Reviewed By: Eiledon McClellan
Francine M. Deutsch, Ruth A. Gaunt,
Be the first to review "Creating Equality at Home: How 25 Couples around the World Share Housework and Childcare" Cancel reply
More than Happy: The Wisdom of Amish Parenting
A Moving Child Is a Learning Child: How the Body Teaches the Brain to Think (Birth to Age 7)
Motherhood Smotherhood: Fighting Back Against the Lactivists, Mompetitions, Germophobes, and So-Called Experts Who Are Driving Us Crazy


Vojo Deretic has spent years studying the cell's ability to clean its own house, and now he has a five-year, $11 million federal grant to help him expand his work.
Deretic, chairman of the University of New Mexico Department of Molecular Genetics and Microbiology, will lead a new center that focuses on a cellular process called autophagy – the Greek word for "self-eating" – that allows cells to rid themselves of unwanted trash, including disease-causing pathogens.
The grant will allow UNM to expand the work into inflammation and metabolism, which play a role in a broad range of diseases, including diabetes, Crohn's disease, HIV and autoimmune disease, Deretic said.
The center is called the Center for Autophagy, Inflammation and Metabolism in Disease, or the AIM Center. It will be funded by the National Institutes of Health as a Center of Biomedical Research Excellence.
The grant will allow UNM to buy the latest technology and hire laboratory staff which will allow faculty to compete with top universities for funding, he said.


Woodworker Projects : Ted's Woodworking How to Use Woodworking Plans For Simple Woodworking Projects – Teds Woodworking is a enormous collection of a lot more than 16,000 woodworking projects and blueprints which you can very easily stick to to develop your personal residence furnishings, garden chairs, dog homes, bird feeders, shed and numerous much more. Ted McGrath spent the last two years putting with each other his woodworking package and according to him this package is the most extensive on the internet these days.this package is intended for a wide audience. Beginners will have no issue picking on the projects right here with clear and concise plans. At some point, they can move on towards a lot more complicated projects as they gain self-assurance. Professionals on the other hand will locate a bit a lot more to find out from further suggestions that can further improve their ability. In addition to that, Teds woodworking is also well illustrated. It really is got sufficient diagrams and photos with correct numbering for measurements. Prior to the guide was published, all measurements had been properly checked by an specialist, hence growing the reliability of this guide. The illustrations and correct numbering is extremely crucial simply because numerous totally free guides do not offer correct specifics which is why numerous home projects end up failed and abandoned.General, Teds Woodworking is a comprehensive package that helps property owners perform woodworking projects very easily. This is a answer for everybody who wants to design and style inventive home furniture without having hiring the skilled.
Never miss get specific Offer for Ted's Woodworking How to Use Woodworking Plans For Simple Woodworking Projects (Woodworker Projects : The Condensing Boiler And Combi Boiler Are High Efficiency Modern Boilers). You really don't desire to miss this possibility. The quality in the information found in Woodworker Projects (Woodworker Projects : The Condensing Boiler And Combi Boiler Are High Efficiency Modern Boilers) is well above anything you'll find that you can buy.


Our Website is a marketplace that allows an Owner to advertise his Property for rent and a Renter to rent the Property on a temporary basis on the terms of a Booking Contract made between the Owner and Renter.
You agree to access our Website only of the purpose for which it was designed, namely to enable Owners to advertise Properties for rent on a temporary basis to Renters. You agree not to take any action that is intended to or may harm the efficient running of our website or infringe our rights or of any visitor to our Website.
When you rent a Property by means of our Website, you make a contract with the Owner. Although the contract is made on the basis of some standard terms that we make available for Owners to use, that are based upon our experience of offering a platform for Owners to advertise Properties for rent on a temporary basis to Renters, we are not party to that contract and we do not make any representation or offer any assurance as to the suitability of the contract for the purpose of renting any particular Property or Properties generally. It is for you to satisfy yourself that the terms of the Booking Contract are appropriate for the purposes for which you use it.
Our software may allow an Owner to post a description of the Property and pictures of it on our Website, as well as a description of any additional services that are offered. Although we offer guidance to Owners about how to do this, it is not practicable for us to verify the accuracy of either the description of the Property or services made by the Owner or to determine whether the photographs posted on our Website fairly reflect the Property and its location. We take no steps to verify that any statements or descriptions of the Property or services offered or any photographic representation of a Property are true and not misleading. We do, however, offer Renters the opportunity to provide feedback on Properties by posting comments on our Reviews section. We allow a Renter to provide feedback on a Property only after his or her booking has completed via the Renter's page on the Website.
What is the Owner responsible for?
When your booking is made, you may be offered the option of buying our Non-Refundable Breakage Waiver. This is an insurance policy that insures the Renter and members of the Renter's Party against claims by the Owner for certain types of loss or damage to the Property during your Stay. We act as an authorised representative of All Seasons Underwriting Agencies Ltd for the purpose of selling this insurance, which is underwritten by Focus Insurance Company Limited.
The content of our website and the software that powers, and is protected by copyright. Clickstay is the owner of the copyright an all intellectual property rights in all material on our website, other than (i) trademarks belonging to third parties, (ii) copyright in material posted on the site by Owners or Renters and (iii) other rights licensed to us .
By posting information on our Website, you confirm that (a) you are the copyright in (and owner of all other intellectual property rights that may be asserted) in such material, (b) that Clickstay Ltd. is granted a worldwide, royalty-free, licence to use and copy that material, (c) that your rights do not infringe the intellectual property rights of any other person and (d) that you agree to indemnify us and hold us harmless against all loss and damage that we may suffer as a result of any claim that you do not own and are unable to grant to us the right to use such material or that such material infringes the intellectual property rights of anyone-else. To the extent that you would own any intellectual property rights in our website but for this clause, you assign and transfer them to us absolutely.
"Villarenters" and "Clickstay" are trademarks of Clickstay Ltd.
Clickstay Ltd. is a private company, limited by shares and incorporated in England and Wales under number 8674663, whose registered office is at Astral House, Granville Way, Bicester, Oxfordshire, United Kingdom OX26 4JY.
Clickstay Ltd.'s VAT number is 172 5682 90.
Clickstay Ltd. is an Appointed Representative of All Seasons Underwriting Agencies Ltd (Firm number 308488), whose registered office is at 6-8 Fenchurch Building, Fenchurch Street, London United Kingdom EC3M 5HT. It is regulated by the Financial Conduct Authority under number 609793. Our Non-Refundable Breakage Waiver is underwritten by Focus Insurance Company Limited, registered in Gibraltar under company number 96218 and licensed and regulated by the Financial Services Commission of Gibraltar.
Owner means the person who has an account with us and who either owns or co-owns the Property or who is the authorised agent of the owner(s) of the Property and in either case, has the permission of all owners of the Property to market and let the Property as temporary accommodation in accordance with a Booking Contract.
Property means a hotel, apartment block, apartment, house, villa or other accommodation made available for temporary occupation by a Renter via our Website in accordance with the terms of a Booking Contract.
Us, We, Our refers to Clickstay.


The SIPLACE Operation Information System (OIS for short) is an integral part of every SIPLACE placement machine.
SIPLACE OIS is your window into our placement equipment that provides your staff with the all important operating data: production data, machine availability, capacity utilization, reject rates, and a whole lot more.
Particularly important are the trend indicators. This early-warning system provides important information about things that aren't quite working the way they should. If predefined thresholds are exceeded, the software issues a warning.
You can install SIPLACE OIS the way you want.
Thanks to its client-server structure, you can even run SIPLACE OIS away from the line – a great feature for technicians, production managers and schedulers.


As humans, we define ourselves partly in relation to the built environment around us. Buildings in the urban context interact with one another and allow individuals to create a narrative of who they are-past, present, and future. Our memory and identity are forever changed after buildings and monuments are destroyed through war, natural destruction, and urban planning. The subsequent rebuilding both "as it once was" as well as a complete modern reconstruction ultimately suppresses memory seemingly creating a sense of utopia.
Using a sewing machine, fabric and paint on raw canvas, and inspired by aerial view landscape drawings and maps, I invent 'plots' that are neither true abstractions, nor complete landscapes but navigate between interpretative poles. With a limited palette and through an improvisational approach, these works are large in scale and hint to an unfamiliar impossible space, a space that allows viewers to detach and contemplate their relationship to the external world. I seek to connect the dichotomy of the cold, analytical masculine subject with the appropriation of traditional feminine materials, adopting a sewing machine as a mechanically precise drawing tool.
My most recent stitched works are inspired by the evolution of urban landscapes and how it ties to memory, focusing recently on New York City's topographical evolution. I use Google Earth and archival images to collect my data and use this information as a starting point to create this invented series of urban renewal projects. The works are still done through improvisation pointing to a heterotopic, neither here nor there vision of New York; an unreality based on a utopian inspired ideal.
BIO: Christine Gedeon was born in Aleppo, Syria, raised in northern New Jersey, and is based in New York City. Her work was exhibited in the Bronx Biennial at the Bronx Museum in 2011, after being selected for the the Artist in the Marketplace program (AIM 30). She also had a solo show at A.I.R. Gallery in 2006 as part of an Emerging Artist's Fellowship. Other solo and two-person shows include: Chashama, Harlem, CAS Arts Center, Livingston Manor, NY, And/Or Gallery, Dallas, TX, and the The New Art Center in New York. Selected group shows include: The Old Stone House, Brooklyn, Field Projects, New York, Kulturmöllan, Lövestad, Sweden, The Arlington Museum, Fort Worth, TX, Vertex List, Williamsburg, and DIVA Fair Miami. Her work was featured in an article on female artists in Art in America in July 2007 and reviewed in Hyperallergic, The Dallas Morning News, and The River Reporter in Livingston Manor.
Residencies include the THE WYE, Berlin, Germany, in 2012-13, Fundacion Valparaiso in Mojacar, Spain in 2012 where she worked on a site-specific installation, and a 2-month residency on Governors Island in 2011 through galleryELL. Gedeon received a BA in Fine Arts and Art History from SUNY New Paltz in 1995.


The Android flagship scored 180079, while the iPhone 7 Plus got only 174299. The reason for weaker performance is probably somehow connected with the release of iOS 10.3.2. Since the figures for June are not ready yet, the HTC U11 remains the most powerful smarphone that is currently available for purchase.
Along with the iPhone 7 Plus, the smaller iPhone 7 has lost its position, losing to the Xiaomi Mi 6, Samsung Galaxy S8 and the Galaxy S8+.
In real life, however, iPhones work smoother and are generally faster in opening apps and completing day-to-day tasks.


The largest headwind for Canadian households, lenders and the economy in 2019-20 is the same force that worked as a tailwind in the decade before: real estate.
Naturally, the leaders of the boom years -the greater Vancouver and Toronto areas - are now also leading the deflation cycle.
Spring listings come to market as Vancouver already had 12,774 homes for sale in March, 52% more than a year ago and 10.2% more than a month earlier.
The largest headwind for Canadian households, lenders and the economy in 2019-20 is the same force that worked as a tailwind in the decade before: real estate. Naturally, the leaders of the boom years -the greater Vancouver and Toronto areas - are now also leading the deflation cycle. And a popular plan to 'list this spring' suggests homes on offer are set to rise significantly in the weeks ahead.
Spring listings come to market as Vancouver already had 12,774 homes for sale in March, 52% more than a year ago and 10.2% more than a month earlier. Although 8% cheaper than last March, the benchmark composite index price for a Vancouver home is still $1.01 million today - an impossible 12.5x the $80,000 median household income in the city.
The Real Estate Board of Greater Vancouver (REBGV) reported today that a total of 1,727 homes sold in the region in March - the lowest sales total for the month since 1986 - down 31% from a year earlier and 46% below the 10-year March sales average. See: Prospective home buyers remain on the sidelines in March.
Of course, the REBCV President blames governments for higher lending standards and new taxes that deter speculation, rather than the unaffordable prices and the decade-long credit party that burdened the nation with debt servitude that'll take years to alleviate.
Canada is a stand-out in this problem, but we're not alone. According to Knight Frank, a London-based real-estate consulting firm, inflation-adjusted home-price gains have significantly outpaced income growth over the last five years in 18 of 25 world cities. See: Affordable housing crisis spreads throughout the world.
Now as prices fall, sellers tend to hold high and hope for a rebound. But new buyers have every reason to wait and watch as prices come back in line with long-term affordability metrics. Paying for the last ten years of crazy is going to take some time.


text:
Q: Ignore margin for hover in CSS I have made a little pop up when I hover over a square but I want to go to this popup even with an existing margin.
Here is a snippet with my HTML and CSS code:

.vertical {
    height: 70px;
    width: 70px;
    border-radius: 5px;
    margin-bottom: 10px;
    margin-right: 10px;
    border: solid lightgrey;
    position: relative;
}

.frame {
    height: 100%;
}

.st {
    height: 250px;
}

.info {
    visibility: hidden;
    position: absolute;
    top: 0;
    left: 120%;
    margin-left: -5px;
    border-radius: 5px;
    border: solid black 1px;
    color: white;
}

.vertical:hover .info {
    visibility: visible;
}

.arrow {
    position: absolute;
    right: 100%;
    margin-left: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: transparent rgba(2, 0, 0, 0.75) transparent transparent;
    top: 25px;
}

Hover

Here is an example (if you don't follow the arrow the popup will close):
https://jsfiddle.net/bpez64fr/
I want to ignore the margin and allow the user to go to the popup and make it work as if there was no margin

A: My strategy would be to put the element to be shown on hover at left:100% so that there's no gap for the cursor to "fall in". You can then use padding on this element to create the visual whitespace between the main element and the hover element, and put the element's content in an inner element .info-inner in my example. Note that .info-inner must be position:relative for the positioning of the .arrow to work.
Let me know if this works for you.

.vertical {
    height: 70px;
    width: 70px;
    border-radius: 5px;
    margin-bottom: 10px;
    margin-right: 10px;
    border: solid lightgrey;
    position: relative;
}

.frame {
    height: 100%;
}

.st {
    height: 250px;
}

.info {
    visibility: hidden;
    position: absolute;
    top: 0;
    left: 100%;
    padding-left: 10px;
}

.info-inner {
    border-radius: 5px;
    border: solid black 1px;
    color: white;
    position: relative;
}

.vertical:hover .info {
    visibility: visible;
}

.arrow {
    position: absolute;
    right: 100%;
    margin-left: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: transparent rgba(2, 0, 0, 0.75) transparent transparent;
    top: 25px;
}

Hover

A: There are several ways to do this but here is one example.
It simple positions the element next to the previous one without a gap.

.vertical {
  height: 70px;
  width: 70px;
  border-radius: 5px;
  margin-bottom: 10px;
  margin-right: 10px;
  border: 3px solid lightgrey;
  position: relative;
}

.infoWrap {
  opacity: 0;
  position: absolute;
  top: -3px;
  left: 100%;
  padding: 0 10px;
  transition: all ease-in-out 0.2s;
}

.info {
  position: relative;
  background: #eee;
  border: solid #aaa 1px;
  border-radius: 5px;
  color: #666;
  width: 100%;
  min-height: 53px;
  padding: 10px;
}

.vertical:hover .infoWrap {
  opacity: 1;
}

.arrow {
  position: absolute;
  right: 100%;
  margin-left: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: transparent #aaa transparent transparent;
  top: 25px;
}

Hover

A: You can use the css transitions property to delay the invisibility of the element.
Example:
.info{ transition: visibility 2s ease-out;}

Updated jsFiddle
In this latter example, I increased the distance to the pop-up to improve the demo:
UPDATED Updated jsFiddle
CSS transitions allow you to delay the advent/removal of a css modification to the DOM, giving the user time to slide the mouse from the box to the pop-up.
References:
https://css-tricks.com/almanac/properties/t/transition-delay/
https://www.w3schools.com/cssref/css3_pr_transition-delay.asp