text:
package org.apache.nifi.processors.standard;

import org.apache.nifi.flowfile.attributes.CoreAttributes;
import org.apache.nifi.reporting.InitializationException;
import org.apache.nifi.serialization.record.CommaSeparatedRecordReader;
import org.apache.nifi.serialization.record.MockRecordWriter;
import org.apache.nifi.util.MockFlowFile;
import org.apache.nifi.util.TestRunner;
import org.apache.nifi.util.TestRunners;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

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

import static org.junit.Assert.assertEquals;

public class TestMergeRecord {
    private TestRunner runner;
    private CommaSeparatedRecordReader readerService;
    private MockRecordWriter writerService;

    @Before
    public void setup() throws InitializationException {
        runner = TestRunners.newTestRunner(new MergeRecord());

        readerService = new CommaSeparatedRecordReader();
        writerService = new MockRecordWriter("header", false, true);

        runner.addControllerService("reader", readerService);

        runner.enableControllerService(readerService);

        runner.addControllerService("writer", writerService);
        runner.enableControllerService(writerService);

        runner.setProperty(MergeRecord.RECORD_READER, "reader");
        runner.setProperty(MergeRecord.RECORD_WRITER, "writer");
    }

    @Test
    public void testSmallOutputIsFlushed() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "1");
        runner.setProperty(MergeRecord.MAX_RECORDS, "1");

        runner.enqueue("Name, Age\nJohn, 35\nJane, 34");

        runner.run(1);
        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 1);

        final MockFlowFile mff = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED).get(0);
        mff.assertAttributeEquals("record.count", "2");
        mff.assertContentEquals("header\nJohn,35\nJane,34\n");

        runner.getFlowFilesForRelationship(MergeRecord.REL_ORIGINAL).forEach(
            ff -> assertEquals(mff.getAttribute(CoreAttributes.UUID.key()), ff.getAttribute(MergeRecord.MERGE_UUID_ATTRIBUTE)));
    }

    @Test
    public void testMergeSimple() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "2");
        runner.setProperty(MergeRecord.MAX_RECORDS, "2");

        runner.enqueue("Name, Age\nJohn, 35");
        runner.enqueue("Name, Age\nJane, 34");

        runner.run(2);
        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 2);

        final MockFlowFile mff = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED).get(0);
        mff.assertAttributeEquals("record.count", "2");
        mff.assertContentEquals("header\nJohn,35\nJane,34\n");

        runner.getFlowFilesForRelationship(MergeRecord.REL_ORIGINAL).forEach(
                ff -> assertEquals(mff.getAttribute(CoreAttributes.UUID.key()), ff.getAttribute(MergeRecord.MERGE_UUID_ATTRIBUTE)));
    }

    // Verify that FlowFiles are grouped with like schemas.
    @Test
    public void testDifferentSchema() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "2");
        runner.setProperty(MergeRecord.MAX_RECORDS, "2");

        runner.enqueue("Name, Age\nJohn, 35");
        runner.enqueue("Name, Color\nJane, Red");

        runner.run(2, false, true);

        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);

        runner.enqueue("Name, Age\nJane, 34");
        runner.enqueue("Name, Color\nJohn, Blue");

        runner.run(2, true, false);

        runner.assertTransferCount(MergeRecord.REL_MERGED, 2);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 4);

        final List<MockFlowFile> mffs = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED);
        assertEquals(1L, mffs.stream()
            .filter(ff -> "2".equals(ff.getAttribute("record.count")))
            .filter(ff -> "header\nJohn,35\nJane,34\n".equals(new String(ff.toByteArray())))
            .count());

        assertEquals(1L, mffs.stream()
            .filter(ff -> "2".equals(ff.getAttribute("record.count")))
            .filter(ff -> "header\nJane,Red\nJohn,Blue\n".equals(new String(ff.toByteArray())))
            .count());
    }

    @Test
    public void testFailureToParse() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "2");
        runner.setProperty(MergeRecord.MAX_RECORDS, "3");

        readerService.failAfter(2);

        runner.enqueue("Name, Age\nJohn, 35");
        runner.enqueue("Name, Age\nJane, 34");
        runner.enqueue("Name, Age\nJake, 3");

        runner.run();

        // We have to route all of the FlowFiles in the same bin to the 'failure' relationship.
        // Otherwise, we may have read some of the records from the failing FlowFile and then
        // routed it to failure, which would result in some of its records moving on and others not.
        // This, in turn, would result in the same records being added to potentially many FlowFiles.
        runner.assertAllFlowFilesTransferred(MergeRecord.REL_FAILURE, 3);
    }

    @Test
    public void testDefragment() {
        runner.setProperty(MergeRecord.MERGE_STRATEGY, MergeRecord.MERGE_STRATEGY_DEFRAGMENT);

        final Map<String, String> attr1 = new HashMap<>();
        attr1.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr1.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "1");
        attr1.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "0");

        final Map<String, String> attr2 = new HashMap<>();
        attr2.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr2.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "1");
        attr2.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "1");

        final Map<String, String> attr3 = new HashMap<>();
        attr3.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr3.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "2");
        attr3.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "0");

        final Map<String, String> attr4 = new HashMap<>();
        attr4.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr4.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "3");
        attr4.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "0");

        final Map<String, String> attr5 = new HashMap<>();
        attr5.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr5.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "3");
        attr5.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "1");

        runner.enqueue("Name, Age\nJohn, 35", attr1);
        runner.enqueue("Name, Age\nJane, 34", attr2);

        runner.enqueue("Name, Age\nJay, 24", attr3);

        runner.enqueue("Name, Age\nJake, 3", attr4);
        runner.enqueue("Name, Age\nJan, 2", attr5);

        runner.run(1);

        assertEquals("Fragment id=2 should remain in the incoming connection", 1, runner.getQueueSize().getObjectCount());
        runner.assertTransferCount(MergeRecord.REL_MERGED, 2);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 4);

        final List<MockFlowFile> mffs = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED);
        assertEquals(1L, mffs.stream()
            .filter(ff -> "2".equals(ff.getAttribute("record.count")))
            .filter(ff -> "header\nJohn,35\nJane,34\n".equals(new String(ff.toByteArray())))
            .count());

        assertEquals(1L, mffs.stream()
            .filter(ff -> "2".equals(ff.getAttribute("record.count")))
            .filter(ff -> "header\nJake,3\nJan,2\n".equals(new String(ff.toByteArray())))
            .count());
    }

    @Test
    public void testDefragmentOverMultipleCalls() {
        runner.setProperty(MergeRecord.MERGE_STRATEGY, MergeRecord.MERGE_STRATEGY_DEFRAGMENT);

        final Map<String, String> attr1 = new HashMap<>();
        attr1.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr1.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "1");
        attr1.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "0");

        runner.enqueue("Name, Age\nJohn, 35", attr1);
        runner.run(2);

        assertEquals("Fragment should remain in the incoming connection", 1, runner.getQueueSize().getObjectCount());
        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);
        runner.assertTransferCount(MergeRecord.REL_FAILURE, 0);

        final Map<String, String> attr2 = new HashMap<>();
        attr2.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr2.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "1");
        attr2.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "1");

        runner.enqueue("Name, Age\nJane, 34", attr2);
        runner.run(1);

        assertEquals("Fragments should merge", 0, runner.getQueueSize().getObjectCount());
        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 2);
        runner.assertTransferCount(MergeRecord.REL_FAILURE, 0);

        final List<MockFlowFile> mffs = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED);
        assertEquals(1L, mffs.stream()
                .filter(ff -> "2".equals(ff.getAttribute("record.count")))
                .filter(ff -> "header\nJohn,35\nJane,34\n".equals(new String(ff.toByteArray())))
                .count());
    }

    @Test
    public void testDefragmentWithMultipleRecords() {
        runner.setProperty(MergeRecord.MERGE_STRATEGY, MergeRecord.MERGE_STRATEGY_DEFRAGMENT);

        final Map<String, String> attr1 = new HashMap<>();
        attr1.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr1.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "1");
        attr1.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "0");
        attr1.put("record.count", "2");

        final Map<String, String> attr2 = new HashMap<>();
        attr2.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr2.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "1");
        attr2.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "1");
        attr2.put("record.count", "2");

        final Map<String, String> attr3 = new HashMap<>();
        attr3.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr3.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "2");
        attr3.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "0");
        attr3.put("record.count", "2");

        runner.enqueue("Name, Age\nJohn, 35\nJane, 34", attr1);

        runner.enqueue("Name, Age\nJake, 3\nJan, 2", attr2);

        runner.enqueue("Name, Age\nJay, 24\nJade, 28", attr3);

        runner.run(1);

        assertEquals("Fragment id=2 should remain in the incoming connection", 1, runner.getQueueSize().getObjectCount());
        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 2);

        final List<MockFlowFile> mffs = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED);
        assertEquals(1L, mffs.stream()
            .filter(ff -> "4".equals(ff.getAttribute("record.count")))
            .filter(ff -> "header\nJohn,35\nJane,34\nJake,3\nJan,2\n".equals(new String(ff.toByteArray())))
            .count());

    }

    @Test
    public void testDefragmentWithMultipleRecordsOverMultipleCalls() {
        runner.setProperty(MergeRecord.MERGE_STRATEGY, MergeRecord.MERGE_STRATEGY_DEFRAGMENT);

        final Map<String, String> attr1 = new HashMap<>();
        attr1.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr1.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "1");
        attr1.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "0");
        attr1.put("record.count", "2");

        final Map<String, String> attr2 = new HashMap<>();
        attr2.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "2");
        attr2.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "1");
        attr2.put(MergeRecord.FRAGMENT_INDEX_ATTRIBUTE, "1");
        attr2.put("record.count", "2");

        runner.enqueue("Name, Age\nJohn, 35\nJane, 34", attr1);

        runner.run(2);

        assertEquals("Fragment id=1 should remain in the incoming connection", 1, runner.getQueueSize().getObjectCount());
        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);

        runner.enqueue("Name, Age\nJake, 3\nJan, 2", attr2);

        runner.run(1);

        assertEquals("Fragment id=1 should be merged", 0, runner.getQueueSize().getObjectCount());
        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 2);

        final List<MockFlowFile> mffs = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED);
        assertEquals(1L, mffs.stream()
            .filter(ff -> "4".equals(ff.getAttribute("record.count")))
            .filter(ff -> "header\nJohn,35\nJane,34\nJake,3\nJan,2\n".equals(new String(ff.toByteArray())))
            .count());

    }

    @Test
    public void testMinSize() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "2");
        runner.setProperty(MergeRecord.MAX_RECORDS, "2");
        runner.setProperty(MergeRecord.MIN_SIZE, "500 B");

        runner.enqueue("Name, Age\nJohn, 35");
        runner.enqueue("Name, Age\nJane, 34");

        runner.run();
        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);

        final StringBuilder sb = new StringBuilder("Name, Age\n");
        for (int i = 0; i < 100; i++) {
            sb.append("Person " + i + ", " + i + "\n");
        }
        runner.enqueue(sb.toString());

        runner.run();

        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 3);
    }

    @Test
    public void testValidation() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "103");
        runner.setProperty(MergeRecord.MAX_RECORDS, "2");
        runner.setProperty(MergeRecord.MIN_SIZE, "500 B");

        runner.assertNotValid();

        runner.setProperty(MergeRecord.MIN_RECORDS, "2");
        runner.setProperty(MergeRecord.MAX_RECORDS, "103");
        runner.assertValid();
    }

    @Test
    public void testMinRecords() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "103");
        runner.setProperty(MergeRecord.MAX_RECORDS, "110");
        runner.setProperty(MergeRecord.MIN_SIZE, "500 B");

        runner.enqueue("Name, Age\nJohn, 35");
        runner.enqueue("Name, Age\nJane, 34");

        final StringBuilder sb = new StringBuilder("Name, Age\n");
        for (int i = 0; i < 100; i++) {
            sb.append("Person " + i + ", " + i + "\n");
        }
        runner.enqueue(sb.toString());

        runner.run();
        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);

        runner.enqueue("Name, Age\nJohn, 35");
        runner.run(2);
        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 4);
    }

    @Test
    public void testMaxRecords() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "5");
        runner.setProperty(MergeRecord.MAX_RECORDS, "10");

        for (int i = 0; i < 34; i++) {
            runner.enqueue("Name, Age\nJohn, 35");
        }

        runner.run();
        runner.assertTransferCount(MergeRecord.REL_MERGED, 3);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 30);

        assertEquals(4, runner.getQueueSize().getObjectCount());

        runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED).stream().forEach(ff -> ff.assertAttributeEquals("record.count", "10"));
    }

    @Test
    public void testMaxSize() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "5");
        runner.setProperty(MergeRecord.MAX_SIZE, "100 B");

        for (int i = 0; i < 36; i++) {
            runner.enqueue("Name, Age\nJohnny, 5");
        }

        runner.run();
        runner.assertTransferCount(MergeRecord.REL_MERGED, 3);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 33);

        assertEquals(3, runner.getQueueSize().getObjectCount());
    }

    @Test
    @Ignore("This unit test depends on timing and could potentially cause problems in an automated build environment. However, it can be useful for manual testing")
    public void testTimeout() throws InterruptedException {
        runner.setProperty(MergeRecord.MIN_RECORDS, "500");
        runner.setProperty(MergeRecord.MAX_BIN_AGE, "500 millis");

        for (int i = 0; i < 100; i++) {
            runner.enqueue("Name, Age\nJohnny, 5");
        }

        runner.run(1, false);
        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);

        Thread.sleep(750);
        runner.run(1, true, false);

        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 100);
    }

    @Test
    public void testBinCount() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "5");
        runner.setProperty(MergeRecord.MAX_RECORDS, "10");
        runner.setProperty(MergeRecord.MAX_BIN_COUNT, "5");
        runner.setProperty(MergeRecord.CORRELATION_ATTRIBUTE_NAME, "correlationId");

        final Map<String, String> attrs = new HashMap<>();
        for (int i = 0; i < 5; i++) {
            attrs.put("correlationId", String.valueOf(i));
            runner.enqueue("Name, Age\nJohn, 3" + i, attrs);
        }

        runner.run(1, false);

        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);
        runner.assertTransferCount(MergeRecord.REL_FAILURE, 0);

        attrs.put("correlationId", "5");
        runner.enqueue("Name, Age\nJohn, 35", attrs);
        assertEquals(5, ((MergeRecord) runner.getProcessor()).getBinCount());
        runner.run(1, false, false);

        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 1);
        runner.assertTransferCount(MergeRecord.REL_FAILURE, 0);
        assertEquals(5, ((MergeRecord) runner.getProcessor()).getBinCount());
    }

    @Test
    public void testDefragmentOldestBinFailsWhenTooManyBins() {
        runner.setProperty(MergeRecord.MIN_RECORDS, "5");
        runner.setProperty(MergeRecord.MAX_RECORDS, "10");
        runner.setProperty(MergeRecord.MAX_BIN_COUNT, "5");
        runner.setProperty(MergeRecord.MERGE_STRATEGY, MergeRecord.MERGE_STRATEGY_DEFRAGMENT);

        final Map<String, String> attrs = new HashMap<>();
        attrs.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "5");
        for (int i = 0; i < 5; i++) {
            attrs.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, String.valueOf(i));
            runner.enqueue("Name, Age\nJohn, 3" + i, attrs);
        }

        runner.run(1, false);

        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);
        runner.assertTransferCount(MergeRecord.REL_FAILURE, 0);

        attrs.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "5");
        runner.enqueue("Name, Age\nJohn, 35", attrs);
        assertEquals(5, ((MergeRecord) runner.getProcessor()).getBinCount());
        runner.run(1, false, false);

        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);
        runner.assertTransferCount(MergeRecord.REL_FAILURE, 1);
        assertEquals(5, ((MergeRecord) runner.getProcessor()).getBinCount());
    }

    @Test
    public void testDefragmentExpiredBinFailsOnTimeout() throws InterruptedException {
        runner.setProperty(MergeRecord.MAX_BIN_COUNT, "5");
        runner.setProperty(MergeRecord.MERGE_STRATEGY, MergeRecord.MERGE_STRATEGY_DEFRAGMENT);
        runner.setProperty(MergeRecord.MAX_BIN_AGE, "1 millis");

        final Map<String, String> attrs = new HashMap<>();
        attrs.put(MergeRecord.FRAGMENT_COUNT_ATTRIBUTE, "5");
        attrs.put(MergeRecord.FRAGMENT_ID_ATTRIBUTE, "0");
        runner.enqueue("Name, Age\nJohn, 30", attrs);

        runner.run(1, false);

        Thread.sleep(50L);
        runner.run(1, true, false);

        runner.assertTransferCount(MergeRecord.REL_MERGED, 0);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 0);
        runner.assertTransferCount(MergeRecord.REL_FAILURE, 1);
    }

    @Test
    public void testMergeWithMinRecordsFromVariableRegistry() {
        runner.setVariable("min_records", "3");
        runner.setVariable("max_records", "3");
        runner.setValidateExpressionUsage(true);

        // Test MIN_RECORDS
        runner.setProperty(MergeRecord.MIN_RECORDS, "${min_records}");
        runner.setProperty(MergeRecord.MAX_RECORDS, "3");

        runner.enqueue("Name, Age\nJohn, 35");
        runner.enqueue("Name, Age\nJane, 34");
        runner.enqueue("Name, Age\nAlex, 28");

        runner.run(1);
        runner.assertTransferCount(MergeRecord.REL_MERGED, 1);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 3);

        final MockFlowFile mff = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED).get(0);
        mff.assertAttributeEquals("record.count", "3");
        mff.assertContentEquals("header\nJohn,35\nJane,34\nAlex,28\n");
        runner.clearTransferState();

        // Test MAX_RECORDS
        runner.setProperty(MergeRecord.MIN_RECORDS, "1");
        runner.setProperty(MergeRecord.MAX_RECORDS, "${max_records}");

        runner.enqueue("Name, Age\nJohn, 35");
        runner.enqueue("Name, Age\nJane, 34");
        runner.enqueue("Name, Age\nAlex, 28");
        runner.enqueue("Name, Age\nDonna, 48");
        runner.enqueue("Name, Age\nJoey, 45");

        runner.run(2);
        runner.assertTransferCount(MergeRecord.REL_MERGED, 2);
        runner.assertTransferCount(MergeRecord.REL_ORIGINAL, 5);

        final MockFlowFile mff1 = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED).get(0);
        mff1.assertAttributeEquals("record.count", "3");
        mff1.assertContentEquals("header\nJohn,35\nJane,34\nAlex,28\n");

        final MockFlowFile mff2 = runner.getFlowFilesForRelationship(MergeRecord.REL_MERGED).get(1);
        mff2.assertAttributeEquals("record.count", "2");
        mff2.assertContentEquals("header\nDonna,48\nJoey,45\n");
        runner.clearTransferState();

        runner.removeProperty("min_records");
        runner.removeProperty("max_records");
    }

    @Test
    public void testNegativeMinAndMaxRecordsValidators(){

        runner.setVariable("min_records", "-3");
        runner.setVariable("max_records", "-1");

        // This configuration breaks the "<Minimum Number of Records> property cannot be negative or zero" rule
        runner.setProperty(MergeRecord.MIN_RECORDS, "${min_records}");
        runner.setProperty(MergeRecord.MAX_RECORDS, "3");
        runner.assertNotValid();

        // This configuration breaks the "<Minimum Number of Records> property cannot be negative or zero" and the
        // "<Maximum Number of Records> property cannot be negative or zero" rules
        runner.setProperty(MergeRecord.MIN_RECORDS, "${min_records}");
        runner.setProperty(MergeRecord.MAX_RECORDS, "${max_records}");
        runner.assertNotValid();

        // This configuration breaks the "<Maximum Number of Records> property cannot be smaller than <Minimum Number of Records> property"
        // and the "<Maximum Number of Records> property cannot be negative or zero" rules
        runner.setProperty(MergeRecord.MIN_RECORDS, "3");
        runner.setProperty(MergeRecord.MAX_RECORDS, "${max_records}");
        runner.assertNotValid();

        // This configuration breaks the "<Maximum Number of Records> property cannot be smaller than <Minimum Number of Records> property"
        // and the "<Maximum Number of Records> property cannot be negative or zero" rules
        runner.removeProperty(MergeRecord.MIN_RECORDS); // Will use the default value of 1
        runner.setProperty(MergeRecord.MAX_RECORDS, "${max_records}");
        runner.assertNotValid();

        // This configuration breaks the "<Maximum Number of Records> property cannot be smaller than <Minimum Number of Records> property",
        // the "<Minimum Number of Records> property cannot be negative or zero" and the "<Maximum Number of Records>
        // property cannot be negative or zero" rules
        runner.setVariable("min_records", "-1");
        runner.setVariable("max_records", "-3");
        runner.setProperty(MergeRecord.MIN_RECORDS, "${min_records}");
        runner.setProperty(MergeRecord.MAX_RECORDS, "${max_records}");
        runner.assertNotValid();

        // This configuration is valid
        runner.setVariable("min_records", "1");
        runner.setVariable("max_records", "5");
        runner.setProperty(MergeRecord.MIN_RECORDS, "${min_records}");
        runner.setProperty(MergeRecord.MAX_RECORDS, "${max_records}");
        runner.assertValid();

        runner.removeProperty("min_records");
        runner.removeProperty("max_records");
    }

}


After doing a great interview series with Silly Walks Discotheque and Oneness Records in my previous blog articles, time for another interview with House of Riddim!
I had the chance to talk to Sam Gilly from House of Riddim, we talked about their riddims, the amazing artists line-up, their goals for 2015 and question about reggae and dancehall in general.
House of Riddim is the top address for Roots reggae, located near St. Pölten, Austria. The prove to be first-class creators of wonderful groovy Roots Riddims.
Who is House of Riddim and why did you decide to go with Reggae Music?
House of Riddim is a band, a production team. We are doing a lot of live backing and our studio is well booked. In the studio of House of Riddim we record riddims for several artists, produce or own riddims, we do mixing, mastering and so on. It was not a decision to doing Reggae. I mean, this is the music we love, so its simple to do it.
House of Riddim celebrated their 10 year anniversary a while ago, where did it all start?
It started in 2003 to produce our own riddims. A lot of artists gave us feedback that they love it and they wanted to voice it. In 2004 we recorded the first album; "House of Riddim" presents. During this period we also got our first backing band jobs. From this time on, it's going up!
How Many artists did you work with and how many riddims did you produce?
What is your favorite tool for Reggae/Music Production?
Strictly live instruments and Logic. From the instruments in the full analog mixing desk, into the ssl converters.
Can you tell a bit more about your brand new release "Still Bones Riddim"?
Well, this riddim was recorded long long time ago. I think in 2009. Over the years, more and more artists jumped on it and so we decided to put it out as a riddim selection. The riddim has an old-school vibe. Maybe thats the reason why the artist like it so much.
The Still Bones Riddim features some great artists, how did you manage to get those great artists on this riddim?
We know all those artists for a long time and we worked together. Some of the artists voice it in different studios. Some of them voice it in our studio in Austria. In 2015 it's easy to send files everywhere in the world.
Personally i love that reggae is more popular again. And i also love it that more band, Jamaican bands are around!
What's coming up in 2015 for House of Riddim?
At the moment we are busy with recording in the studio. Mixing and producing. From June till September we will be on tour with Jah Sun and several artist.
In 2014 we were 7 months on the road and now we are back in the studio. Its good to work in the studio, a lot of things to do.
Want to know more about House of Riddim?
Find their online presence and more resources.
And a lot more! Check out iTunes or the shop at House of Riddim.


Today we continued with our tour of Jerusalem and the surrounding areas. We went to the top of the Mount of Olives where we were greeted with a spectacular panoramic view of Jerusalem.
We were privileged to be invited to the Palestinian Dental Association where we were given a guided tour and were made aware of the many difficulties dentists and dental students face living here. It made us feel really appreciative of the support we receive in the UK throughout our training and careers. Personally I was staggered by the level of dedication my colleagues here are demonstrating in remaining in a challenging profession given their circumstances. It has certainly made me reevaluate my issues in life.
We then visited a charity that provides support for single mothers and orphans. This support varies from basic food packages to arranging fun activities for the children. It is run by an extremely dedicated woman who is passionate about maintaining this crucial service for her community. I think I speak for all of us when I say she is a truly inspiring person who we will not forget.
We went on to visit the Jordan River, Jericho, Hebron, and ended our day with a lovely evening in Bethlehem where we were able to take part in the Christmas Eve celebrations. A perfect end to a very exhilarating day.
After a good night rest the team met for breakfast and were ready to beign our tour of Jerusalem at 9am. The team covered over 11 miles through the historic streets of Jerusalem as we took in the array of amazing sites including the Via Dolorosa, Church of Holy Sepulchre, the Wailing Wall and the Al-Aqsa mosque complex including the Dome of the Rock. We admired some beautiful rooftop views of this historic city and later in the evening visited family homes in the old city of Jerusalem. This long day was finished with dinner kindly cooked for us by a local family.
Today the dental team are travelling from around the United Kingdom to meet at Manchester airport and they will fly together to Tel Aviv. The team this year includes a dental nurse, a dental therapist and a dentist currently in their vocational training year. We also have a specialist registrar in paediatric called Helen Rogers, joining us this year. Helen has been able to secure us a great deal of free dental stock such as stainless steel crowns that we can use to provide dental treatment.
On arrival in Tel Aviv there was a a wait for several hours for a few of the team members whilst the Israeli security forces carried out security checks but thankfully everyone was eventually issued a travel visa.
Looking forward to a few days of sightseeing before getting stuck into work.


Just wanted to say thanks for Vert Shock. I'm only in the 8th grade but I'm 6'2" so everyone expects me to be able to dunk.
This stuff actually works. I'm only 2 weeks into Vert Shock and I just threw down my first dunk ever!! I went from hardly being able to touch rim to DUNKING!
Before I started it I was grabbing rim with 1 hand from a running start. I can now grab rim with 2 hands from a STANDING JUMP!
Vert Shock is one of the best programs out there and I want to thank Adam for helping me achieve my dream of dunking.
Here's a picture of him accepting the first-place trophy at the Nike World Dunk Contest alongside LeBron and Anthony Davis.
And if you're willing to stick with me for just a few minutes, I'm going to tell you everything you need to know.
What would your life be like if you could throw down high flying dunks with ease… anytime you wanted?
Imagine your whole school… maybe whole town… watching you throw down the MASSIVE dunks in games.


text:
Dignity and sincerity: The scriptural call in the Kavanaugh moment
The principle that one must treat a person as a person, not an object, has many scriptural wellsprings. None is more powerful than the principle, "Love your fellow as yourself."
By NOAH LAWRENCE
Updated: OCTOBER 25, 2018 19:11
A STATUE of Martin Luther King. Many Jews supported the Civil Rights movement in the US
The debate over Justice Brett Kavanaugh's nomination to the US Supreme Court is now behind us. For some time to come, we in America will continue to sift through what has taken place, reflect on it and consider the damage that this process has wrought. As we do, we must confront the troubling fact that, when we most needed to consider evidence regarding Dr. Christine Blasey Ford's allegation that Kavanaugh sexually assaulted her, the debate brought forth a profusion of distractions, distortions and excuses – to the point that we as a nation essentially saw two different hearings. What our shared conversation urgently needs is a voice that can disperse this fog and enunciate our values. And since these issues span the domains of the political-legal and the cultural-moral, we need a voice that can speak to both.
The recent American figure who best did so was Rev. Dr. Martin Luther King Jr. He played this role, among other ways, by drawing on scripture to speak to his listeners with all the firepower with which scripture spoke to its original audiences and on through the ages. Although our discourse today lacks a personage like King, what we still possess is our national culture, the sum of all the traditions and texts of those who live here. Those traditions and texts still call to us. They call out two principles in particular for our moment: we must treat others as people, not objects; and we must believe sincerity over contrivance.
The principle that one must treat a person as a person, not an object, has many scriptural wellsprings. None is more powerful than the principle, "Love your fellow as yourself" (Leviticus 19:18; all translations mine unless otherwise noted). What exactly does it mean to love? The Talmud offers a crucial definition: "All love that is dependent on a thing [or: object], if the thing ceases, the love ceases," i.e. is false. "And love that is not dependent on a thing, it will not cease for eternity," i.e. is real and worthy. "What is love that is dependent on a thing? This is the love of Amnon and Tamar. And what is love that is not dependent on a thing? This is the love of David and Jonathan" (Pirké Avot 5:16).
Amnon, in 2 Samuel 13, rapes Tamar. He treats her as an object in the most total way; he transgresses utterly the demand to treat her as a human being, created in God's image (Genesis 1) and thus possessing innate qualities such as autonomy, feelings and dignity. The narrative describes Amnon's actions as "abuse" (2 Samuel 13:22, Robert Alter's translation). By the starkest of contrasts, it is respecting and honoring those innate qualities in a person — it is treating her or him as a human being — that is the foundation of real, worthy love. And the Hebrew Bible's and the Talmud's word choice insists that our treatment of each other go beyond respect and indeed constitute love, or, as one might loosely translate for a political-legal context, empathy. Those who treat people as objects show that when it comes to such respect and empathy — key judicial, as much as personal, attributes and duties — they fall significantly short.
Meanwhile, there are those who accept the horror of Ford's allegation, but deny that Kavanaugh was a perpetrator. It is too easy to leave this case as one of "he said, she said," with nothing more to be said. In cases like these, whom do we as a society believe?
Here, too, scripture calls to us. Consider another Biblical figure: Hannah. When she goes to the sanctuary to pray for a child, she is in "bitterness of soul" (1 Samuel 1:10) and "a bleak-spirited woman" (1:15, Alter's translation). She at the same time "is speaking in her heart" (1:13) – but significantly, the kind of "heart" that speaks in sync with "soul" and "spirit." Hannah exhibits, in one word, sincerity. Sincerity is a key sign that someone's account of the facts should be believed. The Bible sharpens this point by showing that 1) Eli the priest at first does not believe that Hannah is truly in the sanctuary to pray, taking her for a drunkard; 2) Eli listens to Hannah and changes his mind; and finally 3) God answers Hannah's prayer (verses 13-20).
By contrast, from the lead-up to Noah's flood in Genesis to Jeremiah's censures of false prophets, the Hebrew Bible features numerous examples of the word "heart" without accompanying words like "soul" and "spirit." "Heart" in these contexts entails base appetites and self-invented thoughts and schemes that contravene veracity and ethics: in sum, contrivance.
What we have just experienced as a nation is not a case of "he said, she said," but one in which we must seek to know when sincerity spoke and when contrivance spoke, and then choose accordingly which voice to believe. This Biblical framework goes beyond that still-undying waters-muddying commonplace and confronts us with the question: What are he and she saying, and how are they saying it?
The Bible's emphases on treating a person as a person and not an object and on believing sincerity over contrivance seem almost self-evident. But as we know from the American Declaration of Independence, the "self-evident" is not the obvious until people listen to it and act.
The writer is a student at New York City's Yeshivat Chovevei Torah Rabbinical School, whose mission is to train "rabbis who are open, non-judgmental, knowledgeable, empathetic," and committed to "Orthodoxy [as]… a movement that expands outward, non-dogmatically, and cooperatively, to encompass the needs of the larger Jewish community and the world." Previously, he worked in law and politics, including for Senator Richard Blumenthal, at the Israeli Supreme Court, and at the UN International Criminal Tribunal for the former Yugoslavia in The Hague.
Tags Genesis Brett Kavanaugh

redpajama_set_name: RedPajamaCommonCrawl


1. Be aware of the benefits of networking.
help you learn from an increasing range of contacts with whom you can share ideas, advice, and strategies.
provide you with referrals for a variety of needs. A good network will always know somebody who can help you.
supply you with a sounding board to test your ideas, provide feedback, let off steam, or discuss problems.
promote your career as you become known, aware, and involved.
lessen your professional isolation, particularly if your organisation is located in a remote area.
be enjoyable by giving you the chance to meet new colleagues, socialise, and expand your professional horizons.
2. Work to develop areas of personal expertise.
Networking presumes that members have competence and expertise, so develop your own skills and knowledge. Become a recognised authority on something, someone worth getting to know, so that you can become a vital member of the network.
3. Analyse your current network of contacts.
Examine your current network's viability. Check your address book, business cards, correspondence files, professional association contacts, and phone index. Create an up-to-date, flexible card index or computer data-base on which to build.


The other day, while I was at the gym, I heard someone mention that he tries to eat healthy, but since healthy food is so expensive, he basically lives off of ground turkey and energy bars. Later, while talking with a friend, the subject of food came up and we started talking about how hard it is to have a healthy diet when healthy food costs so much more than "junk" food.
Why does processed food, which has so many ingredients often cost less than real, whole food with only one ingredient? I don't know the answer to that question, but I do have a few solid tips to help you improve the quality of your diet without blowing your grocery budget sky high.
I know, I know, everyone's been told that canned vegetables are inferior to fresh in almost every way. But, the truth is, some vegetables are better canned. Take tomatoes, for example. Canned tomatoes are already peeled, they come whole, sliced, diced, stewed, pureed, and just about every way in between. Using canned tomatoes is convenient, but it's also nutritionally beneficial. Lycopene, the major antioxidant in tomatoes, is made more readily available to the body when the tomatoes have been cooked. Similarly, the vitamin A in carrots and corn is greater in the cooked versions of those veggies rather than in the raw version, so you'll get more vitamin A from canned corn and carrots than from fresh or frozen. The all have the added benefit of being less expensive in their canned forms, as well.
While some canned vegetables are fantastic, not all vegetables take to canning as well as others. As a rule, avoid canned green vegetables. They may be less expensive, but they will lack texture, flavor, and nutrients that make the fresh or frozen versions of those veggies so wonderful.
2. When you do buy fresh produce, buy what's in season.
Produce that's in season when you buy it will not only be fresher and less expensive, but it will also taste better. Fresh asparagus is best (and cheapest) in the spring, while fresh Brussels sprouts are best in the fall. For a more comprehensive guide to what's in season now, check out this great list. Another great way to learn what's in season and when is to go to a farmers' market and check out their fresh produce. If they're selling cucumbers at the farmers' market, then you can bet that the cucumbers are in season and tasting their best.
This might be rather obvious, but it's worth repeating. Carrots and celery are cheap. Baby carrots and pre-cut celery sticks are expensive. If you really want to save some money, buy whole carrots and celery, and cut them into convenient snack sized sticks yourself. Not only will they be less expensive, but they'll taste better, too.
4. Stretch your meat by adding beans.
Beans are a great, inexpensive way to make a small amount of meat go a long way. Want to make that taco meat feed six or eight people instead of four? Add a can of drained and rinsed black beans to the meat when you add the taco seasoning. The beans will break up as you stir them into the meat, and not only will you have a bigger bowl of taco meat, but you've also added some extra fiber to dinner. This is also a great way to sneak some veggies onto the plates of picky eaters.
Of course, you don't always have to add beans directly to the meat to stretch it. Serve a white bean salad alongside roasted chicken, or add edamame to your next stir-fry. One thing to keep in mind, though, is that beans are also high in carbohydrates, so if you need to watch your carbs for any reason, skip the grains and other starchy vegetables in that meal.
5. Be flexible with your proteins.
Extra lean ground turkey and boneless skinless chicken breast are getting all the love right now because they're considered the "healthy" option. Now, I love ground turkey, and I certainly eat my fair share of boneless skinless chicken breast, but these two proteins are expensive and aren't always the best choice for every recipe. Beef, pork, and dark meat chicken are all healthy choices — what matters is how they're prepared. Look for what's on sale when you go grocery shopping and plan your meals around that. If beef is on sale, get a nice chuck roast and make a nice pot roast or a big pot of soup. Or serve grilled pork chops with a sweet and sour cole slaw. Roast chicken legs with root vegetables and serve with a quick green salad for an easy weeknight meal. The options are limitless, just as healthy, and a lot more fun when you start exploring the meat section.
6. Grow your own herbs.
Fresh herbs are ridiculously expensive in the grocery store. They're also extremely easy to grow at home. In the summer, plant herbs in window boxes, in container gardens, or directly in the ground and enjoy them well into the fall. If you want to continue the fun during the winter, all you need is a sunny window or two. Plant your herbs in pots and put them in a sunny spot. All you need to do is give them a little water and trim off what you want to use in your culinary creations. They're not just cheap and easy to grow at home, but they add tremendous flavor to your food.
Check out this great tutorial on growing herbs at home.
So, it is possible to have a healthy and varied diet without breaking the bank. Do you have any tips for keeping the grocery bills under control? I'd love to hear them in the comments.


Four Bedroom Mobile Homes L 4 Bedroom Floor Plans Pertaining To 4 Bedroom Modular Home Ideas. Four Bedroom Mobile Homes L 4 Floor Plans Pertaining To Modular Pertaining To 4 Bedroom Modular Home Plan. About Four Five Bedrooms Village Homes Intended For 4 Bedroom Modular Home Plan. 4 Bedroom Modular Homes Floor Plans Mobile Home Inside Plan 3 Intended For 4 Bedroom Modular Home Renovation. 4 Bedroom Modular Homes Helptohelp Me Pertaining To Prepare 8 With Regard To 4 Bedroom Modular Home Decorating. 4 Bedroom Modular Homes Charming Fresh Home Design Ideas Arelisapril Within 4 Bedroom Modular Home Plan. Four Bedroom Modular Homes 3 Home Floor Plans Unique Regarding 4 With 4 Bedroom Modular Home Plan. Floor Plans Champion 381l Manufactured And Modular Homes Making Regarding 4 Bedroom Modular Home Prepare. 4 Bedroom Modular Homes How To Pick The Best One For You Inside 4 Bedroom Modular Home Ideas. 4 Bedroom Modular Homes Ny Plans Anichi Throughout With Idea 7 Throughout 4 Bedroom Modular Home Plan. Modular Home Floor Plans And Designs Pratt Homes Inside 4 Bedroom 13 Regarding 4 Bedroom Modular Home Decorating. 4 Bedroom Prefab Homes Marvelous Ideas Modular Within 5 Pertaining To 4 Bedroom Modular Home Decorating. 18 Beautiful Modular Home Floor Plans Florida Intended For 4 Bedroom Modular Home Plan. Modest Astonishing 4 Bedroom Modular Homes Floorplans Ace Intended Intended For 4 Bedroom Modular Home Plan. Magnificent Modular Homes Florence Sc Select Homes Inc Pertaining To 4 Bedroom Modular Home Prepare. Modular Homes 4 Bedroom Floor Plans Fresh Moduline Homes Floor Plans With Regard To 4 Bedroom Modular Home Plan. 4 Bedroom Modular Home Plans Cavareno Home Improvment Galleries Inside 4 Bedroom Modular Home Ideas. Custom Modular Homes And Floor Plans In Va Virginia For 4 Bedroom With Regard To 4 Bedroom Modular Home Prepare.


text:
Q: Check if value is x and exists and then mark complete if all exist I believe I am over thinking this process to the point I have lost myself.
I have courses which employees take. Each lesson is marked completed when the employee finishes the lesson.
I am trying to check if the employee has completed all course lessons and then mark the course as completed if all lessons have completed.
What I have so far.

*

*Query for course lessons.

*Query for completed lesson from employee.
I'm stuck on checking for each course lesson has the completed the lesson and returning a true or false value.
public function lessoncomplete(Request $request)
{
    //LessonLog::create(request()->all());

    $user_id = $request->user;
    $lesson_id = $request->lesson;
    $course_id = $request->course;
    $lessonLog = new LessonLog;
    $lessonLog->user_id = $user_id;
    $lessonLog->course_id = $course_id;
    $lessonLog->lesson_id = $lesson_id;
    $lessonLog->save();

    //get course lessons
    $course_lessons = Lesson::where('course_id', $course_id)->get();

//get the lessons the user has completed
    $user_lessons = LessonLog::where('user_id', $user_id)->where('course_id', $course_id)->get();

//check if each of the lessons for the course are complete for the user.
foreach ($course_lesson as $lesson) {
    $completed = false;
foreach ($user_lessons as $user_lesson) {
    if ($user_lesson->lesson_id == $lesson->id) {
        $completed = true;
        break;
    }
}

//If $completed is still false, then the user has not completed the course
dd($completed);

}
    return response()->json(['success' => 1]);
}

A: I'm assuming LessonLog will contain all of the completed lessons? If so, you can just loop through the lessons tied to the course and see which ids match in the lesson log. If they all match, then the course is completed.
Example:
foreach ($course_lesson as $lesson) {
    $completed = false;

    foreach ($user_lessons as $user_lesson) {
        if ($user_lesson->lesson_id == $lesson->id) {
            $completed = true;
            break;
        }
    }

    //If $completed is still false, then the user has not completed the course
    //Stop iteration
    if (!$completed)
       break;
}

A:     //check if each of the lessons for the course are complete for the user.

  foreach ($course_lessons as $lesson) {
    $completed = false;

    if($user_lessons->isEmpty()){
    $completed= false;
    }
    else{

    foreach ($user_lessons as $user_lesson) {
        if ($user_lesson->lesson_id == $lesson->id) {
            $completed = true;
            break;
        }else{
            $completed= false;
            break;
        }
    }
}
    //If $completed is still false, then the user has not completed the course
    $complete = new CourseCompletions;

    $complete->user_id = $user_id;
    $complete->course_id = $course_id;
    $complete->added_by = '99999';

    $complete->save();
}

I see where I left out finishing the check if there was no value. I had tried a few ways to complete it. I think I was mistyping.

redpajama_set_name: RedPajamaStackExchange


I have over 15 years experience in Real Estate field. I provide specially tailored services to get you best results. I listen to your need for personalize service and help you find your dream home.
I majored in Real Estate with a Real Estate Certificate From Glendale Community College, GCC, Glendale, California, I attended and studied various computer technology related classes.
I always improve my real estate sales skills, I have been attending Real Estate continuing educational and marketing skills classes, studying, training, attending meetings, seminars, and many other real estate and investment related advanced multi topic seminars work shops.
My technology skills have been helping me to gain and serve my clients much better, and more efficiently.
I owned and managed businesses prior joining real estate field, all of the past business experiences help me to serve my clients' needs much better. I love to educate and help all of my clients and others about the process of selling or buying a home, investment properties, and all other type of real estate services.
I enjoy reading books, outdoor walking, watch comedy television shows and movies. I like to do volunteer work in my community and help others with their needs.
My clients are always happy, satisfied, and trust me, please contact me for the best quality service, transparency, constant honesty, and the best service I provide always.
I will post all of my clients' good and kindly testimonials in future. I want to thank you all for taking the time to read my information about my real estate business experience, and my life.
I always maintain the highest degree of honesty, trust, integrity, and transparency, in every thing I do in my personal life and my business.


text:
Calea UK is a supplier of parenteral nutrition  based in Runcorn, part of  Fresenius Kabi.

In July 2019 the Medicines and Healthcare products Regulatory Agency imposed restrictions on the company following an inspection which it said had revealed contamination risks and that its production processes did not meet required standards. The resulting disruption of supplies to patients who rely on total parenteral nutrition was declared a national emergency by NHS England.  Intravenous feed bags were imported from Norway and Germany for 511 patients.  These bags are only a temporary expedient because they do not provide vital nutrients and electrolytes, such as potassium.  Dozens of patients were admitted to hospital as a result.

The actions of the regulator were denounced as reprehensible by clinical members of the British Association for Parenteral and Enteral Nutrition, who said there wasn't any apparent forward planning or mitigation plan around what would happen when they were closed down.

Calea said it "was directed by the MHRA to make an immediate change to the process by which we add trace elements and vitamins to our parenteral nutrition bags, and we complied with the instruction. As a result, the time taken to produce bags has increased considerably and this has, unfortunately, affected the supply to patients. The MHRA stated there was no evidence to indicate that any of the Calea products manufactured and supplied to patients were contaminated. Approximately 2.8 million products were aseptically manufactured by Calea for patients and hospitals in the intervening 2015-2019 period."

The agency said they had found bacterial contamination in the production area and that the manufacturing processes in Runcorn did not meet guidelines.

Patients complained that they were left starving when supplies did not arrive, and that they were given no information. There were about 130 patients affected in Wales. The substituted supplies made some of them very ill. About 2500 patients are receiving intravenous nutrition and fluids in the UK at any one time. It is expected that it will be some time before regular supplies are resumed.  The industrial capacity is very small. The action of the agency has been widely condemned by clinicians.

References

Companies based in Cheshire
Health care companies of the United Kingdom
Intravenous fluids

redpajama_set_name: RedPajamaWikipedia


text:
é uma região especial da Metrópole de Tóquio, no Japão.

Em 2015, a região tem uma população estimada em 444.356 habitantes e uma densidade populacional de 12.770 pessoas por km². A sua área total é de 34,80 km².

Katsushika foi fundada a 15 de março de 1947.

O escritório da prefeitura de Katsushika está localizado em Tateishi.

Geografia
Katsushika está localizada no extremo leste da Metrópole de Tóquio, em uma planície aluvial acima do nível do mar. Os principais rios da região de Katsushika incluem os Edogawa, Arakawa e Ayasegawa, além dos rios Nakagawa e Shin-nakagawa.

Katsushika possui divisas territoriais com três regiões especiais de Tóquio: Adachi, Edogawa e Sumida. As cidades de Matsudo, na província de Chiba, e Misato e Yashio, na província de Saitama, formam a fronteira nordeste da região.

Distritos e bairros

Economia
A empresa de brinquedos Takara Tomy possui a sua sede em Katsushika.

Atrações turísticas

 Jardim Horikiri.

 Katsushika Shibamata Tora-san.
 Katsushika Symphony Hills.
 Museu de Arte Local e Astronomia de Katsushika.
 Planetário Ginga.
 Templo Shibamata Taishakuten.
 Yamamototei.

Transporte

Ferrovias
JR Leste

 Linha Joban: Kameari, Kanamachi.
 Linha Principal sobu: Shin-Koiwa.

Estrada de Ferro Elétrica Keisei

 Linha Principal Keisei: Horikiri-shobuen, Ohanajaya, Aoto, Keisei Takasago.
 Linha Keisei Oshiage: Yotsugi, Keisei Tateishi, Aoto.
 Linha Keisei Kanamachi: Keisei Takasago, Shibamata, Keisei Kanamachi.
 Linha Hokuso Railway Hokuso: Keisei Takasago, Shin-Shibamata.

Rodovias

 Via Expressa Shuto C2 Central Loop (Itabashi JCT - Kasai JCT).
 Rota 6 (Mito Kaido).
 Kan-nana.
 Kuramae bashi.
 Heiwa Bashi.
 Shibamata Kaido.
 Okudo Kaido.
 Rota Tóquio 307 Linha Oji-Kanamachi-Edogawa (Oji-ekimae para Minami-shinozaki).

Galeria de Imagens

Referências

Ligações externas

Bairros de Tóquio
Tóquio
Distritos de Tóquio


text:
Apps may be helpful in reducing STI rates
By sa | December 20, 2017 | 0
The research was just one of many interesting papers delivered at the recent RCPI Faculty of Public Health Medicine Winter Scientific Meeting.
A paper focused on STI acquisition was delivered by Dr Lois O'Connor of the Health Protection Surveillance Centre (HPSC) and looked into factors associated with acquisition of STIs in men who have sex with men (MSM) in Ireland.
"Behavioural and sexual factors are associated with STI acquisition in the MSM population studied," found the research.
"To reduce the risk of STI acquisition, we recommend condom use and that STI prevention information is included on commonly-used smartphone apps."
A research poster presented at the meeting also confirmed that "alcohol-related presentations are a significant burden on EDs [emergency departments] and ambulance services, especially on Saturday nights/Sunday mornings," in Ireland.
The poster was presented by Ms Deirdre Goggin, Dr Brian McNicholl and Dr Diarmuid O'Donovan.
"We looked at alcohol-related presentations in 28 of the 30 24-hour EDs in Ireland to measure the scale of the problem and to suggest improvements in the quality of data collection and patient care," according to the poster.
"Contact persons reviewed the records of everyone who presented over the same four six-hour periods on four different dates representing busy and quiet periods and recorded demographic information, method of admission, time spent in ED and ICD-10 code for alcohol-related presentations.
"The total number of presentations was 2,952: 175 (5.9 per cent) were alcohol related, range 101 (28.9 per cent) on Saturday night/Sunday morning to 11 (1.3 per cent) on Monday morning.
"Of the alcohol-related presentations, 103 (58.9 per cent) were brought by ambulance."
In conclusion, the research found that "addressing the alcohol-related burden of alcohol on EDs requires improvements in data collection and information systems and the development of appropriate interventions and related referral services".
Another paper delivered by Ms Brigid Quirke, University College Dublin, compared health experiences from the Canadian Inuit community and the All-Ireland Traveller Health Study and found remarkable similarities between the two populations.
"There are striking similarities in health and wellbeing outcomes between the Inuit and the Irish Traveller populations and there is a need to address the institutional and social determinants that drive these health gaps and implement appropriate policies," found the research.


K712 Pro, Studio headphone from AKG.
AKG adds to its headphone line the K712 Pro studio model, which was introduced at Musikmesse this month.
More information available at www.akg.com.
Phil Jones debuts its first headphones Phil Jones will launch in May its first headphones designed for bass players and musicians who need bass reinforcement.
Prodipe launches the 3000BR/W headphones Prodipe has announced the availability of their new red 3000BR and white 3000W headphones.
[NAMM] Akai launches three MPC headphones MPC is not only related to the pad samplers anymore, Akai gives in 2013 that famous name to three new headphones showed at NAMM 2013.


Using the new cross-compilation framework for the modules, I built the first binary version of the openturns-mixmod module for Windows. It is compatible with the official 1.0 release of OpenTURNS and should run both on 32bits and 64bits versions of Windows, from XP to seven.
Please open tickets if you find any bug.


Q.29. Some of my wedding dresses Lehngas / Sarees have extensive gold or silver work (Zari) work done on them. Will it be covered?
Ans. Yes, under the head of Sarees you should write Asli Zari Sarees separately. Better keep photo's of these for reference. You will find it useful when it comes to lodging of claims.
Q.30. Can Gas burner and cylinder be covered in the policy?
Ans. Yes, these should be mentioned under kitchen equipments category and are covered.
Q.31. Would the utensils, crockery, cutlery be covered under the policy?
Ans. Yes. These would be covered. If you have expensive crockery then mention the make /country of manufacture. If you have sterling silver cutlery keep photographs /weight of each item .Mention it clearly in the detailed list. If the value of sterling silver cutlery is large- get it valued by jeweler and attach to proposal form. This will be useful.
Q.32. If some crockery is broken due to dust storm, is it eligible for claim.
Q.33. Is kitchen chimney covered under the policy?
Ans. Yes, it is covered under kitchen equipment.
Q.34. Would the wardrobe covered under the policy?
Ans. Yes, if it is fitted then it is covered under structure heading. If it is separate then it is covered under furniture & Fixtures heading.
Q.35. Can Bar stand and T.V be covered in the policy?
Ans. Yes, Bar Stand would be covered under furniture. TV would be covered under Electronic Equipment category. If it is less than 5 years old and under AMC then you may take Breakdown policy. LED screen of new TV's (46 inches and higher) is costly and it may get damaged / fail. It is a good decision to take break down policy for new electronic equipment.
Q.36. We have expensive German modular kitchen which cost us Rs 5.50 lakhs. Can it be covered in the policy?
Ans. Yes, it would be covered under furniture. You should mention it clearly in the detailed list.
Q.37. Can I cover a beautiful silk carpet which cost us Rs 3.00 lakhs?
Ans. Yes, it would be covered under furnishing .You should clearly mention quality with size for example (Hand woven Kashmiri Silk carpet 6 feet x 4 feet). You must keep photo. You will find it useful at time of lodging claim.


Movie fans will likely get a trailer for Disney-Pixar's The Incredibles 2 during this year's Super Bowl, but a teaser for Solo: A Star Wars Story is appearing unlikely. One of television's most high-profile events is around the corner, with the New England Patriots taking on the Philadelphia Eagles going head-to-head for the NFL championship in Super Bowl LII in Minneapolis February 4. And while more than 66,000 fans are expected to pack into U.S. Bank Stadium for the big game, well over 100 million viewers more will be watching the game on TV, which means a great opportunity for advertisers to get their product in front of lots of eyeballs – including spots for upcoming spring and summer movies.
With just over a week to go before the big game, rumors are starting to surface about what studios will reveal in their spots during NBC's broadcast of the Super Bowl. Netflix, which has reportedly bought the rights to stream the third Cloverfield film – which may be retitled Cloverfield Station after shooting under the title God Particle – is rumored to be running a spot touting its April 20 release. Universal and Paramount are expected to run spots during the Super Bowl, too, with Universal releasing teasers for Pacific Rim Uprising (March 23) and Jurassic World: Fallen Kingdom (June 22), and Paramount unleashing its first spot for Mission: Impossible - Fallout (July 27). It will cost the studios big, as the average 30-second spot for Super Bowl LII is expected to run about $5 million.
While it seems like the forthcoming spots for some studios are a given, the picture isn't completely clear for Disney. According to Deadline, a Super Bowl spot appears to be on the horizon for The Incredibles 2 (June 15), which will give fans a more comprehensive look at the Disney-Pixar production following a one-minute teaser featuring Bob Parr/Mr. Incredible and baby Jack Jack's undisciplined powers dropped in November. Deadline also noted that in all likelihood spots for Black Panther (February 16) and/or Avengers: Infinity War (May 4) will air Super Bowl Sunday, but at the moment, there's nothing to indicate that the hotly anticipated first teaser for Solo: A Star Wars Story will air.
Deadline seems to express a bit of urgency if a Solo spot doesn't air, noting that since "the film's May 25 release is less than five months away, they have to start promoting." Of course, it shouldn't come as a big surprise to anyone that Disney and Lucasfilm are running behind in their plans for Solo after firing co-directors Phil Lord and Christopher Miller and hiring of Ron Howard, but with the film's May 25 release heavily looming, it won't be long before panic begins to set in with fans.
Even though it seemed to take forever for Star Wars: The Last Jedi to release any footage, the first trailer dropped in April, just a tick over eight months before the film's December 15 release. As for Solo, apart from candid photos tweeted out by Howard, the production has yet to publicly release any official material apart from a brief synopsis, which is very unusual for any large-scale production, much less a Star Wars film. At this juncture, since the rumored trailer for Solo that was expected to be released with Maze Runner: The Death Cure, was just, in fact, a rumor, fans can only hope that Disney and Lucasfilm will instead debut something during the Winter Olympics or with Black Panther in February or at the very least, the Oscars in March.


text:
Fourth annual Horry County Junior ROTC drill meet
The fourth annual Horry County Junior ROTC drill meet took place Saturday at the Myrtle Beach Pelicans' stadium and kicked off Military Appreciation Days. The Horry County high school drill teams that took part were judged by U.S. Army recruiters. Army JROTC teams from Aynor, Green Sea Floyds and Loris high schools as well as Navy JROTC teams from Carolina Forest, Myrtle Beach, North Myrtle Beach and Conway high schools all competed in events such as color guard and unarmed squad. Trophies were also given out with Myrtle Beach High School taking home the first place overall competition trophy. Events are scheduled throughout May including the Military Appreciation Days Parade scheduled for 10:30 a.m. May 25 in The Market Common. The grand marshal of the parade will be U.S. Army veteran turned country musician Keni Thomas. Other events include a Myrtle Beach Pelicans game honoring military veterans Saturday night, a golf tournament on May 24 at the Heritage Golf Course, the Memorial Day Veterans March on May 27 on Ocean Boulevard and the Memorial Day Remembrance Ceremony on May 27 at the Myrtle Beach Convention Center.
Horry County Junior ROTC drill meet
UPDATE: Two plead guilty in Kingston Lake Drive burglary and two choose to stand trial
Will the S.C. 31 bridge be ready by Thanksgiving?
The southern extension of S.C. 31 is projected to be finished this fall — two years after the road was scheduled to open. S.C. Department of Transportation officials on Monday announced the new timeframe and gave tours of the road to state lawmakers, Horry County Council members and the media. Although no specific opening date has been set, DOT staff said they expect the road's final southern leg — which runs from S.C. 544 to S.C. 707— to be ready for traffic before Thanksgiving (Nov. 28). Do you think the bridge will be open by Thanksgiving Day?
Barefoot Landing Farmers Market
Mr. Nigel
Broadways Great American Summer Nights - Ripley's Ruckus
WINCHESTER MODEL 1200 pump 12 ga shotgun like new $600.
NEW SCOTTS LIVING KING 4"
FLYER INSERTER Part Time Position (25-30 hrs/week) $8.50 / hour


Immaculate & clean, open-concept single story w/custom paint ready for immediate move-in. Gorgeous kitchen w/peninsula, cust cabs, & eat-in breakfast nook overlooking main living area w/ 2way gas FP. Multiple living areas, formal dining. Spacious Mstr w/ backyard views, sep sh/Roman tub & w/i closet. Secluded private yard w/fruit trees, patio cover, BBQ island & garden area across from park. Sep laundry, garage w/ storage, alarm & generous BR's.


So you're dying to wear that ugly Christmas sweater you picked out? Well, it may have to wait. The lyrics of the old Christmas classic, "Baby, It's Cold Outside," should be rewritten this year to "Baby, it's warm out outside ... oh baby, you'll sweat out there!"
After a quick burst of cool air over the weekend, the mercury is on its way up again over much of the East.
It's another chapter in what has been an incredibly warm December over much of the Eastern United States in what has been coined among some meteorologists as the "blowtorch."
This month alone, more than 2,600 record high temperatures have been recorded and many more are expected before the New Year.
What is so unusual is just how warm it is expected to get. Many of the major metropolitan areas in the Northeast will likely see some of the warmest Christmas Eves and Christmas Days on record.
New York, Philadelphia and Washington are all expecting highs into the 70s this week -- incredible when you consider the normal high at New York's Central Park is 41 degrees.
The record warmth is not only confined to the I-95 corridor. From now through Christmas Day, records are expected from Texas, through the Gulf Coast, mid-Atlantic, and even New England. Almost all of Florida will be in the 80s on Christmas, and the 70-degree line will reach as far north as Washington.
Not only are the daytime temperatures warm, but the nighttime lows in many locations also are running 10 degrees above the normal daily high temperature.
Meteorologists are pointing to El Niño as the primary cause of the higher-than-average temperatures.
The warming ocean waters in the tropical Pacific alter the weather patterns around the globe.
Not only is the United States seeing record temperatures this month, but much of Europe is warm as well. It was nearly 50 degrees in Moscow this week, with puddles, not ice surrounding the Kremlin.
The higher-than-normal temperatures are forecast to continue for most of the northern half of the United States through the rest of the winter, according to the latest forecast from the Climate Prediction Center.
If you're hoping to see the white stuff on Christmas, don't count on it in some of the usual snowy scapes. Buffalo just saw its first flakes over the weekend, and that will likely be gone by Christmas. Even New England, known for its beautiful snow-covered landscapes this time of year, is hurting for snow.
Only far northern parts of Maine and parts of the upper Midwest will have snow on the ground on Christmas Day.
While snow in the East is hard to come by, it's a whole different story in the West. Skiers are loving it. Snow in much of the Northwest is above normal already. Even the Sierra in California, which is in the fourth year of a record drought, is well on its way to normal this year.
How will travel be to Grandma's house?
AAA projects year-end holiday travel will exceed over 100 million people this year, which would be a record.
Wednesday -- Strong storms and even tornadoes are possible from parts of the Southeast, including Little Rock, Arkansas, and Memphis and Nashville in Tennessee. Expect rain in much of the eastern half of the United States, with possible airport delays for Atlanta, Boston, New York, Philadelphia and Washington. Snow could cause delays in Denver, Minneapolis and Salt Lake City.
Christmas Eve -- Lingering showers and storms for the eastern seaboard. Look for snow to continue in the West, with rain and airport delays for San Francisco.
Christmas Day -- Showers and thunderstorms over much of the Southeast. Snow for the West, including Denver and Salt Lake City, with possible airport delays.
The weekend -- A new storm takes shape for the Plains, along with colder temperatures. We could see snow and ice from the Texas Panhandle north to Kansas and Missouri. Rain and storms continue from Chicago to New Orleans, and rain in the northeast will cause minor delays for the major Northeast hubs.


For the first time in the three-year history of the ranking, SEB is not only the leading corporate bank in Sweden but also in the Nordic region in TNS Sifo Prospera's Corporate Banking 2012 Nordics client survey. SEB is also the bank in the Nordics most recommended by its clients.
"Over the last three years, SEB has invested in improving our service and our holistic offering to Nordic clients outside of Sweden. This has resulted in 300 new clients and a clear position as the Nordic corporate bank. Our leading position in Sweden has been strengthened further the past year. This survey is confirmation that our clients value our business model, and strengthens us even further in our ambition to establish a long-term partnership with our clients," says Magnus Carlsson, head of SEB's Merchant Banking division.
Prospera's Corporate Banking 2012 Nordics survey is based on interviews with CFOs, treasurers and other key positions at 262 large corporates in the region.
SEB is a leading Nordic financial services group. As a relationship bank, SEB in Sweden and the Baltic countries offers financial advice and a wide range of financial services. In Denmark, Finland, Norway and Germany, the bank's operations have a strong focus on corporate and investment banking based on a full-service offering to corporate and institutional clients. The international nature of SEB's business is reflected in its presence in some 20 countries worldwide. On December 31, 2012, the Group's total assets amounted to SEK 2,453 billion while its assets under management totalled SEK 1,328 billion. The Group has about 16,400 employees. Read more about SEB at www.sebgroup.com.


The dry matter content in the filter typically varies between 40 to 60%. To prevent the bed from drying-out, the gas stream must be fairly well saturated with water. This is why to-be-treated air is normally moistened in advance. This can be done with a pre-implemented scrubber. The gas must have a relative humidity of 95%. In practice, it is always better to implement a humidifier in advance, in order to prevent the filter from drying out.
During the design of the biofilter, the required bed volume is calculated via the breakdown rate of components in the flue gas. If the bed height is know (normally 1 -1.5m), then the required biofilter surface can be calculated. The biofilter can be customised on-site or can be purchased in pre-set modules. Depending on the load and the flow rate, multiple modules can be placed next to one another. The typical surface load for a biofilter amounts to 50 - 300 m³/m²h, but can be as low as 5 and as high as 500 m³/m²h. In biofiltration it is important for the filter material to have a pH between 7 and 8 for the break-down of organic components. The break-down speed reduces quickly at pHs less than 6.5.
Classic biofilters The residence time for the gas in the filter must be at least 30 - 45 seconds in order to effectively realise odour and solvent removal. Advanced Biofilters required residence time lies between 18-30 seconds.
It is necessary to closely follow-up filter operation so that one can react quickly when there is a reduction in the filter material's efficiency.
Removal of odoriferous substances in the wastewater area by biodegradation occurs according to the following equation.
Our company makes biofilter process calculations and the amounts of all odor compounds on the basis of Hydrogen Sulfur.
Copyright © 2019 MIS Industry. All rights reserved.


text:
Sacy (1801 noch mit der Schreibweise Sercy) ist eine Commune déléguée in der Gemeinde Vermenton mit  Einwohnern (Stand ) im Département Yonne in der Region Bourgogne-Franche-Comté

Die Gemeinde Sacy wurde am 1. Januar 2016 nach Vermenton eingemeindet. Sie hat seither den Status einer Commune déléguée.

Geografie
Sacy liegt 25 Kilometer südöstlich von Auxerre und etwa 120 Kilometer nordwestlich von Dijon auf einem waldreichen Plateau zwischen den Flüssen Cure und Serein. Nahe dem Ortsteil Le Val du Puits im Süden der ehemaligen Gemeinde wird mit 284 m der höchste Geländepunkt erreicht. Nachbargemeinden von Sacy waren Lichères-près-Aigremont im Norden, Nitry im Osten, Joux-la-Ville im Süden, Lucy-sur-Cure im Südwesten und Vermenton im Westen.
Die Autoroute A6 (Paris-Lyon) tangiert den Nordzipfel der Gemeinde Sacy.

Bevölkerungsentwicklung

Sehenswürdigkeiten
 Kirche Saint-Jean-Baptiste

Persönlichkeiten
 Nicolas Edme Restif de la Bretonne (1734–1806), französischer Romancier
 Antoine-Isaac Silvestre de Sacy  (1758–1838), französischer Philologe und Orientalist
 Jacques Lacarrière (1925–2005), französischer Schriftsteller
 Jean-Paul Roussillon (1931–2009), französischer Schauspieler und Regisseur

Belege

Weblinks

Ort in Bourgogne-Franche-Comté
Commune déléguée im Département Yonne
Gemeindeauflösung 2016
Vermenton


text:
Norfolk town first to trial new postal service
Published: 2:04 PM February 25, 2020 Updated: 8:19 PM October 10, 2020
The post office at Martin's on Miller's Walk, Fakenham, closed on January 20. Picture: Archant - Credit: Archant
A market town will become the first place in the country to trial a new postal service.
Miller's walk on a busy lunchtime PICTURE: Matthew Farmer - Credit: Archant
The Post Office confirmed it was moving forward with a "pop up" service in Fakenham, which has been without a post office since January 20, after the closure of Martin's newsagents in Millers Walk.
Fakenham will be the first of five locations in the country to have this "temporary solution".
This new service will open at the former Thomas Cook building in Millers Walk. It will be named Millers Walk post office, rather than Fakenham, as a permanent location is still being scouted.
However, the post office will be unable to open every day from Monday to Saturday, with full times yet to be confirmed.
Fakenham town mayor, Gilly Foortse. Picture: FAKENHAM TOWN COUNCIL - Credit: Archant
The pop up will offer improved services to the town, including gas and electric top-ups.
Fakenham's mayor Gilly Foortse said: "It was with great relief that the town council received confirmation that the Post Office will shortly be reopening.
"This has been a difficult and concerning few weeks for residents and businesses in our town and surrounding villages. Along with county and district councillors and our local MP, the town council has been working tirelessly to ensure that this vital service is restored."
Yvonne Doy, who has worked for Martins since 2013, said: "Me and my colleagues are really excited to be able to get stuck back in again doing the job we know and love and it will be great to be able to assist the community again.
"I'm extremely impressed with the turnaround of this temporary facility and Fakenham's residents should be extremely proud of themselves for not letting their Post Office go without a fight."
Trish Bullock, from Bircham said: "I'll believe it when I see it!"
Justin Grove from Walsingham said: "Seems strange that the one day a week people might finish early, it's going to be closed!"
A Post Office spokesperson said: "We are finalising plans to open a pop-up Post Office at the former Thomas Cook building at 1 Millers Walk in the next few days.
"Whilst arrangements are being finalised we can confirm that the temporary mobile Post Office will still operate this Thursday (27 February) in the Market Square from 1-4 pm."


text:
Simon's Children's Book
My Name is Simon
I'm Not a Syndrome — My Name Is Simon
Simon's Book
Click here to order Simon's book!
Available now in both e-book formats and print
"I Am Not a Syndrome – My Name is Simon" is the gripping and moving story of a baby diagnosed with Trisomy 18, a genetic disorder in which a person has a third copy of material from chromosome 18. This book by Trisomy mom Sheryl Crosier details the struggle of her son Simon from the early stages of pregnancy to his life here on earth for 88 1/2 days. During this same time, Sheryl confronts a sometimes difficult and indifferent medical system to advocate on Simon's behalf. It is a truly inspirational and moving story.
Simon Dominic Crosier was born on September 7, 2010, in St. Louis, Missouri. He was diagnosed with Trisomy 18 and lived for three memorable months. Despite his disabilities, Simon had a huge impact on all who came into contact with him. The book is about Simon's short and meaningful life, his family and his wonderful caregivers. But more importantly, this story documents the family's battle to advocate for their precious son against an oftentimes callus medical community.
The Crosier family had to overcome challenges put in their way by the medical industry and even extended family members who never valued Simon's fragile existence the way they did. Author Sheryl Crosier's hope is that this story will help motivate health-care professionals and anyone else that reads this account. The lives of children, regardless of their diagnosis, possess inherent dignity and value, and they deserve the best care our advanced country has to offer.
"There is so much more to this story than reading of a little boy's journey," stated Pat Jonas, President and Co-founder of the Australian Rare Chromo Awareness Network (ARCAN). "It is learning about the legacy for which he was here. Simon will live on in the hearts of many and I feel he truly has a place in mine. I don't see Simon's life as a tragedy but as a beautiful blessing. God knew what he was doing when he helped to choose Simon's parents, for they are the ones who will bring his mission to its full potential."
"Beautiful, well done, marvelous and much needed!" — Karen Lamberton, BHE
"I Am Not a Syndrome – My Name is Simon" is now available in Print for the first time. New book orders ship within 3 business days. Click here to order directly from the publisher All Star Press. The printed book is only $12.97 plus s/h.
Major retailers:
E-BOOK EDITIONS
The e-book version of "I Am Not a Syndrome – My Name is Simon" is now available from All Star Press – Books that Change Lives – this week. Click the "buy now" button below to download this book instantly in PDF format for $4.97.
"I Am Not a Syndrome – My Name is Simon" is also available direct from Amazon for the Kindle here, and in all e-book formats from Smashwords.
A portion of proceeds from every sale of this book will go to SOFT, Support Organization for Trisomy 18, 13 and Related Disorders.
Order Simon's Book today
Order Simon's Book today. 5-star rated book on Amazon!
All Star Press
Annie's Hope, the bereavement center for kids
Hope for Trisomy
Prenatal Partners for Life
Simon's Book on Amazon
SOFT – Simon Crosier
SOFT Support Organization for Trisomy
The Missouri Torch/Simon's Story
The TorchCast/Simon's Law
TRIS Tracking Rare Incidence Syndromes
TV Interview on Fox
Book Excerpt of "My Name is Simon"
In Memory of Simon- Donate to SOFT
Letters/comments
Simon's Law
Speaking/Media/Publications
Watch Simon's Webinar


We have long been interested in Carbon isotope "excursions" and took a notion to integrate isotope ratios into a simple box model of the Carbon cycle with an eye to replicating these excursions. The initial result was surprising and it became apparent we will need to adjust our conception of the Carbon cycle to match measured values of atmospheric isotopic change before we venture into geological time.
Each box has its name, the supposed reservoir size, and the observed 13C variance from the PDB standard. Fluxes are shown as appendages of the boxes with an indication of the direction and the supposed rate in Gt/year. The atmosphere is unique in that it communicates with all the other reservoirs. The input from the mantle to the atmosphere by way of volcanism is ignored as it currently seems very small.
We then set up calculations for the relationship of each reservoir with the atmosphere to derive the isotopic change in one year. The result was very surprising. It showed the atmosphere going -3.8 PDB, a very substantial excursion, in one year. We have measurements atmospheric 13C since 1978 and ice core data before that which generally agree that the atmosphere is actually moving more like -.02 per year, two orders of magnitude less.
The isotopes are telling us that our notion of the Carbon cycle is wrong.
When you step back and think about this all the reservoirs are much more negative than the atmosphere except the ocean. Either we are grossly overestimating the inputs from negative sources or we are grossly underestimating the input from the ocean.
We examine here the possibility that we are underestimating the ocean.
We have two boxes for the ocean, the mixed layer and the deep ocean. At +.5 it would take an enormous flux from the deep ocean to get the atmosphere back to -.02 per year. The deep ocean is isolated from the atmosphere by the mixed layer except for small areas of upwelling and deep water formation that amount to maybe 10% of the ocean surface. The mixed layer is in direct contact with the atmosphere over 60% of the planet even after subtracting the areas of deep water communication. At +2 it seems a much better bet for balancing the books.
We confess to adding a box "Swamp" to the model to explicitly deal with biogenic methane which has been measured as low as -100 PDB. This stuff is glub glubbing up from wetlands and much is released from coal mining and oil production. The consensus might be that it amounts to little more than half a Gt/year, but with its staggering negative PDB values we feel it must be included when isotopes are integrated into the cycle.
We initially had it at 10 Gt and realizing that would be controversial reduced it to 2 Gt at a PDB value of -50. We feel this is defensible.
The bottom line it that after reducing Swamp and holding everything else the same it takes 262 Gt/yr input from the mixed layer to get the atmosphere to -.02/yr. The response is very sensitive. For example 265 Gt knocks the atmospheric response down to -.0005. The 262 Gt is about five times the reputed rate, but not an impossible number.
The only way evaporative enrichment can occur is if light (-PDB) Carbon is exported to the atmosphere along with the vapor. This may be a force supporting the measured 7 uatm pressure disequilibrium in favor of the atmosphere over the ocean surface. According to Kevin Trenberth some 4000 Gt of water evaporates from the ocean surface each year. This evaporation factor works against our efforts to balance the isotope ratios, even as it supports the notion of a greater flux.
Realistically, our understanding of the Carbon cycle is very poor and all of the fluxes and reservoir sizes should have error bars the size if the values themselves. Integrating isotope ratios offers a new way to constrain the possibilities.
This entry was posted in Carbon Cycle, Carbon Dioxide Loves to Swim, Climate and tagged Integrating isotopes. Bookmark the permalink.


Home » Dining Room » Space Saving Dining Set » Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table.
Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table.
If perhaps this approach Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. image indicates a good pattern you want, perhaps you can apply it for a benchmark for a home remodeling. The design proven by Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. snapshot is usually terrific, it might lift upwards your own spirits effectively. Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. photograph will make your household emits some sort of comfy environment, together with it is especially superb if you are able to benefit from the conditions. You ought not wait to make use of a suggestions of this Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. image considering the different substances are often put in. Until now, 1 persons offers watched this approach superb Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. snapshot because it posted at January 9, 2018 at 4:00 am. This really robust signs dress yourself in convince anyone of which Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. photo can be described as graphic that will popular with guests. With this particular widely used Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. photo, you will be able to construct a residence that will make your entire household ecstatic.
This approach Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. pic are able to match your lifestyle choice for the reason that pattern can be versatile. And you will moreover obtain Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. pic if you would like get the idea. You can actually simply click this link so that you can download the following HIGH DEFINITION Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. pic. This outstanding Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. photograph options actual resolution: 970 x 619 along with size: 73 KB. You might be unengaged to benefit from Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. photograph with regard to personalized benefit from, never for store-bought make use of. If you want to release this Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. snapshot to your website, then that source link must always end up provided. Thanks for your time for looking at Space Saving Dining Set photo stock and additionally Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table. photo.
Relevant Images of Marvelous Space Saving Dining Set Gain Space And Mobility And Make Your Tiny Apartment Feel Big With A Space Saving Dining Table.


Price range from $1900 to $2500.
The definition of modern romantic. These gowns honour the classic design elements that brides know and love, while embracing a more modern edge. Designed and produced in Toronto, we're proud to be the exclusive retailer of Anais Anette in Vancouver.


An insight into what was happening in Matlock over 630 years ago.
Between 30 September 1376 and September 29 1377 various leases were made by Henry de Haddon, who was the Reeve of Matlock. At this date Matlock was part of the Honour of Tutbury which was also part of the Duchy of Lancaster. The Lord of the Manor was John of Gaunt, Duke of Lancaster.
A piece of waste land was let to John SMERT for 6d. It was 14ft [feet] long.
For the ninth year a piece of land, owned by the Lord of the Manor lying upon Okflat was let to John ASSHOVERE for 8d.
Again for the ninth year William MAYSON let land adjacent to his house 6ft by 21ft it cost him one penny.
John DRAPER let, for the same amount, land 10ft by 8 ft.
John DRAPER also wanted to enlarge his corn storage and as such for another penny was allowed to let more waste land.
The Water Mill, which previously was let for 10 Marks (a mark was 13/4d), could not be let because it stood idle for nearly parts of six months while undergoing repairs. It did make 40/- but this was low on account of the poor price of corn and the repair work.
John de HOKENASTON took on the fishing rights for the five years previously and this was the last year of his lease. He paid the equivalent of a shilling a year to fish the Derwent.
The fishing rights of the Kyrkebrok was 6d.
Twenty five acres of meadow were let to the tenants of Matlock, together with grazing on the meadows after haymaking. One sheepfold, which the tenants were to repair, although the Lord of the Manor would supply the timber. Let for 12 years, it cost 50 shillings. This was the third year of the lease.
Brokwalleclif Quarry was let to John DENE and Richard BROUN for three years for 10 shillings.
See details of 1544 Will of Robert DEANE and arms of DEANE.
Thomas BRUNTON had a Licence to burn one Bole at Harstenegg (Hearthstone Edge).
In 1376-77 Henry of Haddon also leased out other property on behalf of John [of Gaunt]. For fourteen shillings he leased a little place he called Bonshall!!
Information provided by © Michael Spencer.
From Duchy of Lancaster papers at The National Archive ; Duchy of Lancaster documents are catalogued using the abbreviation DL.
Michael Spencer's information was originally circulated to the Derbysgen Mailing List and is reproduced here with kind permission.


If you have always believed that glossy magazines definitely win from electronic magazines, now you definitely will have to change your mind. We present to your attention a cool, advanced theme for WordPress The Source! It is ideal for updating the appearance of your electronic journal, thanks to a customizable layout and a functional slider.


text:
Final Destination 3
Click here for history of Release Date Changes
Movie of the Day for Friday, November 11, 2005
66/68 Michael Bentley If you've seen either of the first two, you've seen this recycled, mass-produced one too.
74/76 Dan Krovich The DVD has a choose your own adventure option. I recommend choosing to turn it off.
142/159 David Mumpower There is three month old milk in my fridge that is fresher than this concept.
James Wong and Glen Morgan's fates have been intertwined since the halcyon days of Johnny Depp/Richard Grieco debates on 21 Jump Street. The duo later worked together on The Commish and Booker, but it was on The X-Files where the duo ascended into the public consciousness. The episode many consider to be the show's high water mark and/or sickest moments, Home, was their creation. There were other high points as well; so many, in fact, that the network gave them their own show.
Space: Above and Beyond lasted only 23 episodes before the network killed it, but Wong and Morgan (presumably) made a lot of money on the endeavor and their parents still loved them. So, not all was lost. They simply made a call to old buddy Chris Carter, and he put them back on the writing team for The X-Files and Millennium. During their down time, the writing partners came up with a new idea: "What if we took the board game, Mouse Trap, and turned it into a major motion picture with numerous convoluted, tragic death sequences?" The rest is history.
Final Destination tapped into the zeitgeist of teenage culture in a way that Scream had four years prior. It turns out that teenagers dealing with raging hormones, erratic sociological skills and crippling insecurities enjoy the premise of bad things happening to impossibly attractive people of roughly equivalent age. Fast forwarding to the present, we now know this concept as the mantra of Lionsgate Films, but it was quite revolutionary for the year 2000.
Even better, the horror film was uniquely popular with critics, a group who generally shuns the horror genre. In addition, it demonstrated fantastic legs in earning $55.3 million in domestic receipts after a relatively paltry opening of $10 million. Final Destination was so popular that something called Devon Sawa was briefly considered an up-and-coming actor simply because it (he?) was in the film. Amazing, no?
A sequel was an obvious choice to the fine folks at New Line Cinema. There was but one catch. Mr. Wong and Mr. Morgan had committed to a Jet Li/Jason Statham project of their invention called The One. The mega-expensive production earned only $43.9 million and was considered something a disaster for its fledgling production company, Revolution Studios. Perhaps coincidentally, said company has recently folded. Needless to say, the writers were less than enthusiastic to get back on the horse so soon after it had kicked their ass. Presumably, such paranoia stems from them knowing exactly what sort of fate would await a protagonist with a similar background in the Final Destination universe.
Enter director David R. Ellis. The minor actor was an inspired choice to direct a Final Destination project. After all, his work history mainly consisted of stuntman jobs, making him a real life version of The Fall Guy. Who would be better at coming up with provocative ideas on how to slay the helpless and prone? Sure, it was dramatically different in tone from his only prior outing as a director, Homeward Bound II: Lost in San Francisco. At least he had a track record of taking over from the efforts of others, though.
All that was asked of Ellis was that he not destroy the franchise potential of the concept. In the process, if he could manage to maim innumerable sexy teens and work in several awkward Apple tie-ins, so much the better. To this day, BOP wonders about the underlying market message sent by Final Destination 2. It is loosely described as: "Use your lottery winnings to buy an iMac and fate will gouge your eyes out with a rapidly descending ladder." I fail to understand how this grows the brand, but Apple has sold 15 million iPods and is devouring Disney from within its own boardroom. Who am I to question?
What is important here is that critics failed to hate Final Destination 2 as much as I feel they should have. The project earned $46.5 million in domestic receipts, a tally in line with the original. That made a third project something of a certainty. The only remaining details to finalize were the storyline and the presence of Wong and Morgan. Once the latter occurred, long time followers of their work could feel reasonably sure that the plot aspect would work itself out.
That's right, kiddies! It's time for Final Destination at an amusement park. All of those hours spent on Roller Coaster Tycoon will finally pay dividends for you when you witness a young girl named Wendy defying the laws of space and time. The one-time-only psychic gets a premonition that if people don't jump out of line before a Millennium Force wannabe starts its trajectory, they will be catapulted into the atmosphere. After a brief epiphany about how Icarus must have felt, the unfortunate riders will be flung down to the Earth at an alarming rate and eventually explode in an orgasm of fiery destruction. Make no mistake, friends. Gravity is always the enemy. Most survivors are no more fortunate than the flaming flotsam and jetsam once the Grim Reaper mounts his pale horse and heads to Wong-Morgantown.
Final Destination 3 is what it is. (David Mumpower/BOP)
See the latest developments for this project on the Final Destination 3 Movie News page.
Vital statistics for Final Destination 3
Main Cast Ryan Merriman, Mary Elizabeth Winstead
Director James Wong
Screenwriter Glen Morgan, James Wong
Distributor New Line Cinema
Trailer Click Here for Trailer
Official Site http://www.fd3movie.com/
Rating R
Running Time 82 minutes
Screen Count 2,880
Return to February 2006 Release Schedule