text:
package com.rackspacecloud.blueflood.service;

import com.rackspacecloud.blueflood.rollup.Granularity;
import com.rackspacecloud.blueflood.rollup.SlotKey;
import com.rackspacecloud.blueflood.utils.Clock;
import com.rackspacecloud.blueflood.utils.Util;
import com.rackspacecloud.blueflood.utils.TimeValue;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.collect.Lists;
import org.joda.time.Instant;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.internal.util.reflection.Whitebox;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;

import static org.mockito.Mockito.when;

public class ScheduleContextTest {
    private static final Logger log = LoggerFactory.getLogger("tests");
    private static List<Integer> shards = new ArrayList<Integer>() {{ add(shard); }};
    private static int shard = 0;
    private static final TimeValue MULTI_THREAD_SOFT_TIMEOUT = new TimeValue(60000L, TimeUnit.MILLISECONDS);;

    private final long ROLLUP_DELAY_MILLIS = 300000; //5 mins
    private final long SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS = 1800000; //30 mins
    private final long LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS = 1800000; //15 mins

    @Before
    public void setUp() {
    }

    @Test
    public void testSimpleUpdateAndSchedule() {
        long clock = 1234000L;
        ScheduleContext ctx = new ScheduleContext(clock, shards);
        Collection<SlotKey> scheduled = new ArrayList<SlotKey>();
        Collection<SlotKey> expected = new ArrayList<SlotKey>();

        ctx.setCurrentTimeMillis(clock); // +0m
        ctx.update(clock, shards.get(0));
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertFalse(ctx.hasScheduled());

        clock += 300000; // +5m
        ctx.setCurrentTimeMillis(clock);
        ctx.update(clock, shards.get(0));
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        // at +5m nothing should be scheduled.
        Assert.assertFalse(ctx.hasScheduled());

        clock += 300000; // +10m
        ctx.setCurrentTimeMillis(clock);
        ctx.update(clock, shards.get(0));
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        // at this point, metrics_full,4 should be scheduled, but not metrics_5m,4 even though it is older than 300s.
        // metrics_5m,4 cannot be scheduled because one of its children is scheduled.  once the child is removed and
        // scheduling is re-ran, it should appear though.  The next few lines test those assumptions.

        expected.add(SlotKey.parse("metrics_5m,4,0"));
        while (ctx.hasScheduled())
            scheduled.add(ctx.getNextScheduled());
        Assert.assertEquals(expected, scheduled);
        ctx.clearFromRunning(SlotKey.parse("metrics_5m,4,0"));

        // now, time doesn't change, but we re-evaluate slots that can be scheduled.
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertFalse(ctx.hasScheduled());
        expected.clear();
        scheduled.clear();

        // technically, we're one second away from when metrics_full,5 and metrics_5m,5 can be scheduled.
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertFalse(ctx.hasScheduled());

        clock += 1000; // 1s
        ctx.setCurrentTimeMillis(clock);
        ctx.update(clock, shards.get(0));
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertTrue(ctx.hasScheduled());
        Assert.assertEquals(ctx.getNextScheduled(), SlotKey.parse("metrics_5m,5,0"));
        Assert.assertFalse(ctx.hasScheduled());
        ctx.clearFromRunning(SlotKey.parse("metrics_5m,5,0"));
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertFalse(ctx.hasScheduled());

        clock += 3600000; // 1h
        ctx.setCurrentTimeMillis(clock);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertTrue(ctx.hasScheduled());
        Assert.assertEquals(ctx.getNextScheduled(), SlotKey.parse("metrics_5m,6,0"));
        Assert.assertFalse(ctx.hasScheduled());
        ctx.clearFromRunning(SlotKey.parse("metrics_5m,6,0"));

        // time doesn't change, but now that all the 5m slots have been scheduled, we should start seeing coarser slots
        // available for scheduling.
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertTrue(ctx.hasScheduled());
        Assert.assertEquals(ctx.getNextScheduled(), SlotKey.parse("metrics_20m,1,0"));
        Assert.assertFalse(ctx.hasScheduled());
        ctx.clearFromRunning(SlotKey.parse("metrics_20m,1,0"));

        // let's finish this off...
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertTrue(ctx.hasScheduled());
        Assert.assertEquals(SlotKey.parse("metrics_60m,0,0"), ctx.getNextScheduled());
        Assert.assertFalse(ctx.hasScheduled());
        ctx.clearFromRunning(SlotKey.parse("metrics_60m,0,0"));

        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertTrue(ctx.hasScheduled());
        Assert.assertEquals(SlotKey.parse("metrics_240m,0,0"), ctx.getNextScheduled());
        Assert.assertFalse(ctx.hasScheduled());
        ctx.clearFromRunning(SlotKey.parse("metrics_240m,0,0"));

        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertTrue(ctx.hasScheduled());
        Assert.assertEquals(SlotKey.parse("metrics_1440m,0,0"), ctx.getNextScheduled());
        Assert.assertFalse(ctx.hasScheduled());
        ctx.clearFromRunning(SlotKey.parse("metrics_1440m,0,0"));

        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        Assert.assertFalse(ctx.hasScheduled());
    }

    @Test
    public void test48HoursSequential() {
        long clock = 1234000L;
        ScheduleContext ctx = new ScheduleContext(clock, shards);
        int count = 0;

        // every 30s for 48 hrs.
        for (int i = 0; i < 48 * 60 * 60; i += 30) {
            clock += 30000;
            ctx.setCurrentTimeMillis(clock);
            ctx.update(clock, shards.get(0));
        }
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        // 5m should include slots 4 through 578.
        String prefix = "metrics_5m,";
        for (int i = 4; i <= 578; i++) {
            count++;
            SlotKey key = ctx.getNextScheduled();
            Assert.assertNotNull(key);
            Assert.assertEquals(Granularity.MIN_5, key.getGranularity());
            ctx.clearFromRunning(key);
        }
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        // 20m 1:143
        prefix = "metrics_20m,";
        for (int i = 1; i <= 143; i++) {
            count++;
            SlotKey key = ctx.getNextScheduled();
            Assert.assertNotNull(key);
            Assert.assertEquals(Granularity.MIN_20, key.getGranularity());
            ctx.clearFromRunning(key);
        }
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        // 60m 0:47
        prefix = "metrics_60m,";
        for (int i = 0; i <= 47; i++) {
            count++;
            SlotKey key = ctx.getNextScheduled();
            Assert.assertNotNull(key);
            Assert.assertEquals(Granularity.MIN_60, key.getGranularity());
            ctx.clearFromRunning(key);
        }
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        // 240m 0:11
        prefix = "metrics_240m,";
        for (int i = 0; i <= 11; i++) {
            count++;
            SlotKey key = ctx.getNextScheduled();
            Assert.assertNotNull(key);
            Assert.assertEquals(Granularity.MIN_240, key.getGranularity());
            ctx.clearFromRunning(key);
        }
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        // 1440m 0:1
        prefix = "metrics_1440m,";
        for (int i = 0; i <= 1; i++) {
            count++;
            SlotKey key = ctx.getNextScheduled();
            Assert.assertNotNull(key);
            Assert.assertEquals(Granularity.MIN_1440, key.getGranularity());
            ctx.clearFromRunning(key);
        }

        // I don't really need to test this here, but it's useful to know where the number in test48HoursInterlaced
        // comes from.
        Assert.assertEquals(575 + 143 + 48 + 12 + 2, count);
        Assert.assertFalse(ctx.hasScheduled());
    }

    // roughly the same test as test48HoursSequential, but we pull slots out in a different order. the count, and thus
    // the state, should should be the same at the end though. This mimics more closely what will happen in production
    // but will be hard to see.  A good example here is that metrics_240m,0 is scheduled right AFTER metrics_60m,3
    // (and naturally after metrics_60m,{0..2}).
    @Test
    public void test48HoursInterlaced() {
        long clock = 1234000L;
        ScheduleContext ctx = new ScheduleContext(clock, shards);

        int count = 0;
        // every 30s for 48 hrs.
        for (int i = 0; i < 48 * 60 * 60; i+= 30) {
            ctx.update(clock, shards.get(0));
            clock += 30000;
            ctx.setCurrentTimeMillis(clock);
            ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
            while (ctx.hasScheduled()) {
                count++;
                SlotKey key = ctx.getNextScheduled();
                ctx.clearFromRunning(key);
            }
        }
        Assert.assertEquals(575 + 143 + 48 + 12 + 2, count);
    }

    // my purpose is to run constantly and hope for no deadlocks.
    // handy: ps auxww | grep java | grep bundle | awk '{if (NR==1) {print $2}}' | xargs kill -3
    // this test takes about 20s on my machine.
    @Test
    public void testMultithreadedness() {
        final AtomicLong clock = new AtomicLong(1234L);
        final ScheduleContext ctx = new ScheduleContext(clock.get(), shards);
        final CountDownLatch latch = new CountDownLatch(3);
        final AtomicInteger updateCount = new AtomicInteger(0);
        final AtomicInteger scheduleCount = new AtomicInteger(0);
        final AtomicInteger executionCount = new AtomicInteger(0);

        // 70 days of simulation.
        final int days = 35;
        final Thread update = new Thread("Update") { public void run() {
            int count = 0;
            long time = clock.get();  // saves a bit of lock contention.
            for (int i = 0; i < days * 24 * 60 * 60; i += 30) {
                if (latch.getCount() == 0) {
                    break;
                }
                time += 30000;
                clock.set(time);
                ctx.setCurrentTimeMillis(time);
                ctx.update(time, shard);
                count++;
            }
            updateCount.set(count);
            latch.countDown();
        }};

        final Thread schedule = new Thread("Scheduler") { public void run() {
            int count = 0;
            while (update.isAlive()) {
                ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
                count++;
                // we sleep here because scheduling needs to happen periodically, not continually.  If there were no
                // sleep here the update thread gets starved and has a hard time completing.
                try { sleep(100L); } catch (Exception ex) {}
            }
            scheduleCount.set(count);
            latch.countDown();
        }};

        Thread consume = new Thread("Runner") { public void run() {
            int count = 0;
            while (update.isAlive()) {
                while (ctx.hasScheduled()) {
                    SlotKey key = ctx.getNextScheduled();
                    ctx.clearFromRunning(key);
                    count++;
                }
            }
            executionCount.set(count);
            latch.countDown();
        }};

        final AtomicBoolean softTimeoutReached = new AtomicBoolean(false);
        Timer timer = new Timer("Soft timeout");
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                while (latch.getCount() > 0) {
                    softTimeoutReached.set(true);
                    latch.countDown();
                }
            }
        }, MULTI_THREAD_SOFT_TIMEOUT.toMillis());

        update.start();
        schedule.start();
        consume.start();

        try {
            latch.await();
        } catch (InterruptedException ex) {
            throw new RuntimeException(ex);
        }

        Assert.assertTrue(updateCount.get() > 0);
        Assert.assertTrue(scheduleCount.get() > 0);
        Assert.assertTrue(executionCount.get() > 0);
        Assert.assertFalse("Soft timeout was reached; deadlock or thread starvation suspected", softTimeoutReached.get());
    }

    @Test
    public void testScheduleYourShardsOnly() {
        long time = 1234000;
        Collection<Integer> shardsA = Lists.newArrayList(0, 1);
        Collection<Integer> shardsB = Lists.newArrayList(2,3,4);
        ScheduleContext ctxA = new ScheduleContext(time, shardsA); // 327,345,444,467,504,543, 32,426,476,571
        ScheduleContext ctxB = new ScheduleContext(time, shardsB); // 184,320,456,526, 435,499, 20,96,107,236,429
        Collection<Integer> allShards = Lists.newArrayList(0, 1, 2, 3, 4);

        time += 1000;
        for (int shardToUpdate : allShards) {
            ctxA.update(time, shardToUpdate);
            ctxB.update(time, shardToUpdate);
        }

        time += 500000;
        ctxA.setCurrentTimeMillis(time);
        ctxB.setCurrentTimeMillis(time);
        ctxA.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);
        ctxB.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        Assert.assertTrue(ctxA.hasScheduled());
        while (ctxA.hasScheduled()) {
            int nextScheduledShard = ctxA.getNextScheduled().getShard();
            Assert.assertTrue(shardsA.contains(nextScheduledShard));
            Assert.assertFalse(shardsB.contains(nextScheduledShard));
        }
        Assert.assertTrue(ctxB.hasScheduled());
        while (ctxB.hasScheduled()) {
            int nextScheduledShard = ctxB.getNextScheduled().getShard();
            Assert.assertTrue(shardsB.contains(nextScheduledShard));
            Assert.assertFalse(shardsA.contains(nextScheduledShard));
        }
    }

    @Test
    public void testRecentlyScheduledShards() {
        long now = 1234000;
        ScheduleContext ctx = new ScheduleContext(now, Util.parseShards("ALL"));
        // change the cache with one that expires after 1 sec.
        Cache<Integer, Long> expiresQuickly = CacheBuilder.newBuilder().expireAfterWrite(2, TimeUnit.SECONDS).build();
        Whitebox.setInternalState(ctx, "recentlyScheduledShards", expiresQuickly);
        Assert.assertEquals(0, ctx.getScheduledCount());

        // update, set time into future, poll (forced scheduling).
        int otherShard = 2;
        now += 1000;
        ctx.update(now, otherShard);
        now += 300001;
        ctx.setCurrentTimeMillis(now);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        // otherShard should be recently scheduled.
        Assert.assertTrue(ctx.getRecentlyScheduledShards().contains(otherShard));

        // wait for expiration, then verify absence.
        try { Thread.sleep(2100); } catch (Exception ex) {}
        Assert.assertFalse(ctx.getRecentlyScheduledShards().contains(otherShard));
    }

    @Test
    public void testGetNextScheduledSecondTimeReturnsNull() {

        // given
        long now = 1234000L;
        long updateTime = now - 2;
        Granularity gran = Granularity.MIN_5;
        int slot = gran.slot(now);

        ScheduleContext ctx = new ScheduleContext(now, shards);
        ctx.update(updateTime, shard);
        ctx.scheduleEligibleSlots(1, 7200000, 3600000);

        // precondition
        SlotKey next = ctx.getNextScheduled();
        Assert.assertNotNull(next);
        Assert.assertEquals(shard, next.getShard());
        Assert.assertEquals(slot, next.getSlot());
        Assert.assertEquals(gran, next.getGranularity());

        // when
        next = ctx.getNextScheduled();

        // then
        Assert.assertNull(next);
    }

    @Test
    public void testGetNextScheduledWhenNoneAreScheduledReturnsNull() {

        // given
        long now = 1234000L;
        ScheduleContext ctx = new ScheduleContext(now, shards);

        // precondition
        Assert.assertEquals(0, ctx.getScheduledCount());

        // when
        SlotKey next = ctx.getNextScheduled();

        // then
        Assert.assertNull(next);
        Assert.assertEquals(0, ctx.getScheduledCount());
    }

    @Test
    public void testPushBackToScheduledOnNonRunningSlotDoesntChangeState() {

        // given
        long now = 1234000L;
        long updateTime = now - 2;
        Granularity gran = Granularity.MIN_5;
        int slot = gran.slot(now);
        SlotKey slotKey = SlotKey.of(gran, slot, shard);

        ScheduleContext ctx = new ScheduleContext(now, shards);
        ShardStateManager mgr = ctx.getShardStateManager();
        ctx.update(updateTime, shard);

        // precondition
        UpdateStamp stamp = mgr.getUpdateStamp(slotKey);
        Assert.assertNotNull(stamp);
        Assert.assertEquals(UpdateStamp.State.Active, stamp.getState());
        Assert.assertEquals(updateTime, stamp.getTimestamp());
        Assert.assertTrue(stamp.isDirty());

        // when
        ctx.pushBackToScheduled(slotKey, true);

        // then
        stamp = mgr.getUpdateStamp(slotKey);
        Assert.assertNotNull(stamp);
        Assert.assertEquals(UpdateStamp.State.Active, stamp.getState());
        Assert.assertEquals(updateTime, stamp.getTimestamp());
        Assert.assertTrue(stamp.isDirty());
    }

    @Test
    public void testPushBackToScheduledOnNonRunningSlot_DOES_ChangeScheduledCount() {

        // TODO: This seems incorrect. If we were to accidentally call
        // pushBackToScheduled on a slot that wasn't running, we would
        // effectively bypass the scheduleEligibleSlots method

        // given
        long now = 1234000L;
        long updateTime = now - 2;
        Granularity gran = Granularity.MIN_5;
        int slot = gran.slot(now);
        SlotKey slotKey = SlotKey.of(gran, slot, shard);

        ScheduleContext ctx = new ScheduleContext(now, shards);
        ctx.update(updateTime, shard);

        // precondition
        Assert.assertEquals(0, ctx.getScheduledCount());

        // when
        ctx.pushBackToScheduled(slotKey, true);

        // then
        Assert.assertEquals(1, ctx.getScheduledCount());
    }

    @Test
    public void testPushBackToScheduledOnNonRunningSlotDoesntChangeRunningCount() {

        // given
        long now = 1234000L;
        long updateTime = now - 2;
        Granularity gran = Granularity.MIN_5;
        int slot = gran.slot(now);
        SlotKey slotKey = SlotKey.of(gran, slot, shard);

        ScheduleContext ctx = new ScheduleContext(now, shards);
        ctx.update(updateTime, shard);

        // precondition
        Assert.assertEquals(0, ctx.getRunningCount());

        // when
        ctx.pushBackToScheduled(slotKey, true);

        // then
        Assert.assertEquals(0, ctx.getRunningCount());
    }

    @Test(expected=NullPointerException.class)
    public void testPushBackToScheduledWithoutFirstUpdatingThrowsException() {

        // TODO: This appears to be due to the
        // SlotStateManager.slotToUpdateStampMap map not being populated until
        // update() is called.

        // given
        long now = 1234000L;
        Granularity gran = Granularity.MIN_5;
        int slot = gran.slot(now);
        SlotKey slotKey = SlotKey.of(gran, slot, shard);

        ScheduleContext ctx = new ScheduleContext(now, shards);
        //ctx.update(updateTime, shard);

        // precondition
        Assert.assertEquals(0, ctx.getScheduledCount());
        Assert.assertEquals(0, ctx.getRunningCount());

        // when
        ctx.pushBackToScheduled(slotKey, true);

        // then
        // an NPE is thrown
    }

    @Test
    public void testSimpleUpdateAndScheduleWithDelayedMetrics() {
        //testing for one slot -> 0

        final long initialCollectionTime = 1209600000000L;
        //***************************************************************************************
        //*  Testing for on-time metrics (ROLLUP_DELAY_MILLIS)                                  *
        //***************************************************************************************

        long clock = initialCollectionTime;
        final Clock mockClock = Mockito.mock(Clock.class);

        ScheduleContext ctx = new ScheduleContext(clock, shards, mockClock);
        Collection<SlotKey> scheduled = new ArrayList<SlotKey>();
        Collection<SlotKey> expected = new ArrayList<SlotKey>();

        ctx.setCurrentTimeMillis(clock); // +0m
        when(mockClock.now()).thenReturn(new Instant(initialCollectionTime + 1));
        ctx.update(clock, shards.get(0)); //metric ingestion

        clock = initialCollectionTime + ROLLUP_DELAY_MILLIS + 1; // a little bit over +5m
        ctx.setCurrentTimeMillis(clock);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        expected.add(SlotKey.parse("metrics_5m,0,0"));
        while (ctx.hasScheduled())
            scheduled.add(ctx.getNextScheduled());
        Assert.assertEquals(expected, scheduled);

        long lastRollupTime = clock;
        when(mockClock.now()).thenReturn(new Instant(lastRollupTime));
        ctx.clearFromRunning(SlotKey.parse("metrics_5m,0,0")); //metrics_5m,0 is now rolled up.
        ctx.clearFromRunning(SlotKey.parse("metrics_20m,0,0"));
        ctx.clearFromRunning(SlotKey.parse("metrics_60m,0,0"));
        ctx.clearFromRunning(SlotKey.parse("metrics_240m,0,0"));
        ctx.clearFromRunning(SlotKey.parse("metrics_1440m,0,0"));

        scheduled.clear();

        //****************************************************************************************
        //*  Testing for short delay metrics(SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS)            *
        //****************************************************************************************

        //delayed metrics for slot 0 (metrics sent after ROLLUP_DELAY_MILLIS)
        long lastIngestTime1 = initialCollectionTime + ROLLUP_DELAY_MILLIS + 300000;
        when(mockClock.now()).thenReturn(new Instant(lastIngestTime1));
        long collectionTime1 = initialCollectionTime + 1;
        ctx.update(collectionTime1, shards.get(0)); //metric ingestion
        ctx.setCurrentTimeMillis(lastIngestTime1);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        Assert.assertFalse("Rollup should not be scheduled for re-roll", ctx.hasScheduled());

        //Trying for rollup again after SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS past since last collection time
        clock = collectionTime1 + SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS + 1; //a little bit over 30 mins
        ctx.setCurrentTimeMillis(clock);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        while (ctx.hasScheduled())
            scheduled.add(ctx.getNextScheduled());

        Assert.assertEquals(expected, scheduled);
        ctx.clearFromRunning(SlotKey.parse("metrics_5m,0,0")); //metrics_5m,0 is now rolled up.
        ctx.clearFromRunning(SlotKey.parse("metrics_20m,0,0"));
        ctx.clearFromRunning(SlotKey.parse("metrics_60m,0,0"));
        ctx.clearFromRunning(SlotKey.parse("metrics_240m,0,0"));
        ctx.clearFromRunning(SlotKey.parse("metrics_1440m,0,0"));

        scheduled.clear();

        //****************************************************************************************
        //*  Testing for long delay metrics(LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS)               *
        //****************************************************************************************

        //delayed metrics with longer delay for slot 0 (metrics sent after SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS)
        long lastIngestTime2 = initialCollectionTime + SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS + 300000;
        when(mockClock.now()).thenReturn(new Instant(lastIngestTime2));
        long collectionTime2 = initialCollectionTime + 2;
        ctx.update(collectionTime2, shards.get(0)); //metric ingestion
        ctx.setCurrentTimeMillis(lastIngestTime2 + 1);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        Assert.assertFalse("Rollup should not be scheduled for re-roll cos of rollup_wait", ctx.hasScheduled());

        //Trying for rollup again after SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS past since last collection time
        clock = lastIngestTime2 + LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS + 1;
        ctx.setCurrentTimeMillis(clock);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        while (ctx.hasScheduled())
            scheduled.add(ctx.getNextScheduled());

        Assert.assertEquals(expected, scheduled);
        ctx.clearFromRunning(SlotKey.parse("metrics_5m,0,0")); //metrics_5m,0 is now rolled up.

    }

    @Test
    public void testSimpleUpdateAndScheduleWithLongerDelayedMetrics() {
        //testing for one slot -> 0

        final long initialCollectionTime = 1209600000000L;
        //***************************************************************************************
        //*  Testing for on-time metrics (ROLLUP_DELAY_MILLIS)                                  *
        //***************************************************************************************

        long clock = initialCollectionTime;
        final Clock mockClock = Mockito.mock(Clock.class);

        ScheduleContext ctx = new ScheduleContext(clock, shards, mockClock);
        Collection<SlotKey> scheduled = new ArrayList<SlotKey>();
        Collection<SlotKey> expected = new ArrayList<SlotKey>();

        ctx.setCurrentTimeMillis(clock); // +0m
        when(mockClock.now()).thenReturn(new Instant(initialCollectionTime + 1));
        ctx.update(clock, shards.get(0)); //metric ingestion

        clock = initialCollectionTime + ROLLUP_DELAY_MILLIS + 1; // a little bit over +5m
        ctx.setCurrentTimeMillis(clock);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        expected.add(SlotKey.parse("metrics_5m,0,0"));
        while (ctx.hasScheduled())
            scheduled.add(ctx.getNextScheduled());
        Assert.assertEquals(expected, scheduled);

        long lastRollupTime = clock;
        when(mockClock.now()).thenReturn(new Instant(lastRollupTime));
        ctx.clearFromRunning(SlotKey.parse("metrics_5m,0,0")); //metrics_5m,0 is now rolled up.
        ctx.clearFromRunning(SlotKey.parse("metrics_20m,0,0"));
        ctx.clearFromRunning(SlotKey.parse("metrics_60m,0,0"));
        ctx.clearFromRunning(SlotKey.parse("metrics_240m,0,0"));
        ctx.clearFromRunning(SlotKey.parse("metrics_1440m,0,0"));

        scheduled.clear();

        //****************************************************************************************
        //*  Testing for long delay metrics(LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS)                           *
        //****************************************************************************************

        //delayed metrics with longer delay for slot 0 (metrics sent after SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS)
        long lastIngestTime2 = initialCollectionTime + SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS + 300000;
        when(mockClock.now()).thenReturn(new Instant(lastIngestTime2));
        long collectionTime2 = initialCollectionTime + 2;
        ctx.update(collectionTime2, shards.get(0)); //metric ingestion
        ctx.setCurrentTimeMillis(lastIngestTime2 + 1);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        Assert.assertFalse("Rollup should not be scheduled for re-roll cos of rollup_wait", ctx.hasScheduled());

        //Trying for rollup again after SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS past since last collection time
        clock = lastIngestTime2 + LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS + 1;
        ctx.setCurrentTimeMillis(clock);
        ctx.scheduleEligibleSlots(ROLLUP_DELAY_MILLIS, SHORT_DELAY_METRICS_ROLLUP_DELAY_MILLIS, LONG_DELAY_METRICS_ROLLUP_WAIT_MILLIS);

        while (ctx.hasScheduled())
            scheduled.add(ctx.getNextScheduled());

        Assert.assertEquals(expected, scheduled);
        ctx.clearFromRunning(SlotKey.parse("metrics_5m,0,0")); //metrics_5m,0 is now rolled up.

    }
}


text:
import { IContainer } from '../model/IContainer';
import { MetaInfo } from '../model/meta/field-meta';
import { ElementValidatorBase } from './element-validator-base';
import { ValidationErrorSeverity } from './validation-error-severity';
import { ValidationMessage } from './validation-message';
import { ValidationResult } from './validation-result';
import { ValidationUtil } from './validation-util';

export class ValidNameValidator extends ElementValidatorBase<IContainer> {

    public validate(element: IContainer, contents: IContainer[] = []): ValidationResult {
        if (element === undefined || element.name === undefined) {
            return ValidationResult.VALID;
        }
        if (!ValidationUtil.isValidName(element.name)) {
            let message = ValidationMessage.ERROR_INVALID_NAME;
            return new ValidationResult(message, false, [element], ValidationErrorSeverity.SAVE_DISABLED);
        }
        return ValidationResult.VALID;
    }
}

redpajama_set_name: RedPajamaGithub


a Rafflecopter giveaway Are you familiar with Atticus? Which is your favourite piece from those I've chosen? How would you spend the £200?
This month's Featured Blogger is the beautiful Sophie Jane!
Meant to add, I like number 5 out of the ones you chose.
I've never heard of them before, but I really like their tees. I like your picks, especially the hairpin one, and I really like the burger gang for life one on their website.


text:
NFL player Edwin Jackson killed by suspected drunk driver
Posted 3:00 PM, February 4, 2018, by Tribune Media Wire
INDIANAPOLIS — Colts linebacker Edwin Jackson and a 54-year-old man died after they were struck by a suspected drunk driver early Sunday morning near Indianapolis.
Indiana State Police told WXIN the two men were standing near a stopped vehicle in the emergency lane on I-70 when they were struck by a vehicle.
A state trooper discovered the wreckage just west of Holt Road shortly before 4 a.m. As the officer slowed his vehicle to stop for the crash, police say he struck the body of one of the victims in the center lane.
Jackson, 26, was a passenger in a ridesharing vehicle being driven by 54-year-old Jeffrey Monroe. Both men were pronounced dead at the scene.
Police said 37-year-old Alex Cabrera Gonsales was driving the black Ford F-150 that struck Jackson and Monroe. Gonsales reportedly ran from the scene after the crash but was arrested a short time later.
Super Bowl LII prop bets include Belichik's outfit, the color of the Gatorade
Investigators believe the driver was intoxicated and driving without a license, according to WXIN. Toxicology results are pending. Weather is not believed to be a factor in this crash.
Jackson was injured for the entire 2017 season. He played in every game during the 2016 season.
Jackson was signed by the Arizona Cardinals as an undrafted rookie out of Georgia Southern. On Dec. 8, 2015, Jackson was signed to the Colts' practice squad.
The Colts released a statement on Sunday afternoon:
"We were heartbroken to hear the news of Edwin Jackson's passing. Edwin was loved by all in the Colts organization. We admired his outgoing personality, competitive spirit and hard-working mentality. He was well-respected among all with whom he crossed paths, and he will be greatly missed in our locker room and throughout our entire organization. We also understand that another person lost his life in the accident, only adding to our sorrow on this day. We are shocked and saddened by this tragedy, and our thoughts and prayers are with the families of both men during this difficult time."
17 most talked-about moments in Super Bowl history
23 pieces of Super Bowl trivia that are actually fascinating (even if you don't care about the Super Bowl)
2 toddlers severely burned, parents injured in north Houston road rage incident
Man accused of hitting father twice with car during fight in YMCA parking lot in NW Harris County
Local News Texas
Local bus driver released from jail; claims she wasn't drunk, but suffering from a stomachache
Red-light traffic cameras banned in Texas
Step-father's car found in Maleah Davis case; 4-year-old girl still nowhere to be found
Woman on flight to Indianapolis says man kissed her, spit on her
Maleah Davis' stepfather charged in 4-year-old's disappearance
2-year-old killed, two men injured during home invasion at Spring apartment
Longtime suspect in Josue Flores murder re-arrested on new charges
Man allegedly made up child abduction story involving dead son to get stolen car back
Florida woman pulls gator from pants when cop asks if she has 'anything else'
Pregnant woman says boyfriend died shielding her after man opened fire

redpajama_set_name: RedPajamaCommonCrawl


15 Unique Resume Layout Template - Organisation writing is a kind of certified communication. More than every other type of creating, expository writing is a day-to-day need of most of occupations. Expository writing, from the main word subject, intends to clarify or subject a subject readily available. You will certainly like our work. Before you start to search for work, take supply of your own personal skills. You're a neighborhood, therefore it's much easier to get creating work from a service that's 20 miles away from you than it is to have a comparable task from a service on the opposing side of the earth.In such areas, you can connect with individuals that are knowledgeable authors and also submit freelance posts on a typical basis to distinctive websites.
Exceptional authors are challenging to discover and also durable writing skills can drive you in many directions. While it's true that there are a couple of exceptional authors in college some discover it incredibly challenging to create. So ought to you require to employ college essay writer online, we're just individuals that you wish to contact.Occasionally you'll be asked for to offer creating examples as a piece of your work or teaching fellowship application. On, you will certainly find totally free return to examples for various task requirements. It may additionally be really valuable to provide an example with content much like the subjects you may be discussing. In lots of circumstances, an excellent creating example can make up for sub-par interviewing skills.
Sometimes you'll be requested to give writing samples as a piece of your task application. Probably while looking for examples you observed poor samples throughout the web. You can't when you may be requested to send a composing sample. It's possible to remain to maintain a few of your absolute best writing samples in UMBCworks. Attempt to coordinate with your sample to the type of writing you will certainly do at work. If you're trying to get operate in bookkeeping or finance you need extremely solid return to. When you obtain a job done from us you will certainly return once more if you require support with another among your essays. Whether you're asking for job, teaching fellowship, or to finish schools, you could be requested to supply a composing sample.
Think of the interests of your visitor to have a great concept regarding what you require to have in your essay. So in situation you have actually an essay assigned that you will certainly require aid with, you can buy essay online cheap from us. Typically, a five-paragraph essay is not uncommon. It is possible to conveniently buy unique university essays and also doesn't overlook to tell family and friends regarding it. Now you can buy authentic university essay online, one that is going to fit your economic strategy and also obtain your job done too. The sort of essay you're looking for will certainly be used to you within the target date used to you. How-to essays are essentially instructional essays. When you're writing an expository essay, you would wish to presume that you're describing subjects to people that are clueless regarding this issue you have actually decided on. When it relates to writing a descriptive expository essay, you would love to make sure you focus on a single aspect at one time. Make an effort to recollect you must supply top outstanding essays that have actually been low-plagiarized.
Related Posts of "15 Unique Resume Layout Template"


text:
BV Youth
James Miles Musical Innovation Grant for Continuing Education
The Black Violin Foundations inaugural program will provide scholarships of up to $2,500 to youth who would like to continue their musical education through a program of their liking that fosters musical creativity and innovation. Programs can range from private lessons, to summer music camps, to college courses. Proof of program legitimacy must be provided during the application process.
Scholarships will be awarded bi-annualy to up to 20 applicants per scholarship cycle. Recipients will be required to submit a follow up report on their musical progress after having received their scholarship and entering their music program. Black Violin will also connect personally with scholarship recipients to provide encouragement and support.
Dreamer Instrument Access Program
Black Violin Foundation Inc. in partnership with Baroque Violin Shop is pleased to announce the Dreamer Instrument Access program.
Over the course of 2021 we will be granting Beginner and Advanced Student String instruments to young musicians that identify as Black, Indigenous, Persons of Color.
The objective of this program is to provide access to quality instruments for existing musicians of color, and to take away the cost burden of purchasing an instrument to prospective students who wish to begin their journey as classical musicians.
Dreamer Diversity Equity & Inclusion Grant
Here's to the Dreamers! A large part of Black Violin Foundation Inc.'s work is in the development of a diverse talent pool.
In order to build out equal racial representation in the classical arts, BVF Inc. has created the Dreamer Diversity Equity & inclusion Grant which seeks to provide financial support to aspiring young musicians that identify as Black Indigenous Persons of Color.
Grants of up to $2,500 will be made available to BIPOC youth who hope to either begin or continue their musical education.
Black Violin Foundation Inc is an organization dedicated to empowering youth by working with them in their communities to provide access to quality music programs that encourage creativity & innovation.
E: info@blackviolinfoundation.org
Attn: Black Violin Foundation Inc.,
5846 South Flamingo Road
Cooper City FL, 33330
© 2023 by Make A Change.


text:
Q: Weakly amenability and exactness for discrete groups A countable discrete group $\Gamma$ is said to be weakly amenable with Cowling-Haagerup constant 1 if there exists a sequence of finitely supported functions $(\phi_n)$ on $\Gamma$ such that $\phi_n\rightarrow 1$ pointwise and $\sup_n ||\phi_n||_{cb}\leq 1$, where $||\phi||_{cb}$ denotes the (completely bounded) norm of the Schur multiplier on $B(l_2\Gamma)$ associated with $(x,y)\mapsto \phi(x^{-1}y)$.
A countable discrete group $\Gamma$ is exact if there exists a sequence of positive-definite kernels $\phi_n:\Gamma\times \Gamma\rightarrow \mathbb{C}$ with the following two properties:
1 For every finite set $F\subseteq \Gamma$ and every $\epsilon>0$ there is an $N$ such that $g_1^{-1}g_2\in F\Longrightarrow |\phi_n(g_1,g_2)-1|< \epsilon, \forall n>N$.
2 For every $n$ there is a finite set $F\subseteq \Gamma$ such that
$\phi_n(g_1,g_2)\neq 0\Longrightarrow g_1^{-1}g_2\in F$.
It is well-known that for discrete groups weakly amenability with Cowling-Haagerup constant 1 implies exactness. (More generally, AP implies exactness).
Is there a direct proof of this result without using the fact that the reduced group C*-algebra $C^*_r(\Gamma)$ is exact as a C*-algebra implies that $\Gamma$ is exact as a group?

A: See Theorem B/Theorem 3.4. in "Exactness of locally compact groups" http://arxiv.org/abs/1603.01829

redpajama_set_name: RedPajamaStackExchange


text:
US/
Woman Gives Birth to Healthy 'Miracle Baby' After Failed Abortion Attempt
"It was pretty much like a slaughterhouse; it was like OK, next, next."
Jason Howerton
"Miracle baby" (Screengrab via Daily Mail)
Doctors told Ariel Knights, 22, that her life would be in danger if she went ahead with her pregnancy due to a medical condition she suffers from. She had a very difficult time with the decision, however, with a young son and fiancé to consider, she decided to have an abortion.
Knights made an appointment at Akron Women's Medical Group in March of 2012. But the abortion didn't go according to plan. The mother is now suing the abortion clinic after it failed to terminate her pregnancy.
The Daily Mail tells the stunning story:
'It was a decision I made because my life was in danger,' [Knights] said. 'I was put in jeopardy.'
On the morning of her appointment, in March 2012, Knights said women were being herded into the clinic's waiting room like cattle.
'Every seat was full. People were standing,' Knights told the Beacon Journal. 'It was pretty much like a slaughterhouse; it was like OK, next, next.'
She described how, when her name was called, she walked into a cramped room, hopped onto a table and, as instructed, positioned her lower body over a trash bag. When the doctor was finished, and she was still woozy from the sedation, Knights was handed her belongings and shown the door.
'(The doctor) said, "All right, everything's good and clear, everything went well,"' she recalled, thinking that was it.
But that was hardly the end of the story.
After becoming extremely ill and suffering from pain, Knights went to the emergency room where an obstetrician gave her an internal ultrasound.
"The look on (the doctor's) face when he found out, he was like, 'Oh my goodness, honey, you're still pregnant,'" the mother told the Journal. "My fiancé and I, we both were kind of in shock."
According to the lawsuit, Knights then called the Akron abortion clinic, who are denying the allegations against them, and she was informed she could go to their Cleveland office. She declined and instead got in touch with another clinic, however, they told her she wouldn't be treated for "somebody else's mistake."
So Knights and her fiancé decided to go through with the pregnancy.
"But because she suffered uterine didelphys, which results in a double uterus with individual cervices, it was dangerous and extremely stressful," according to the Daily Mail.
Though it required multiple ER visits, bi-weekly ultrasounds and a doctor specializing in high-risk pregnancies, Knights gave birth to a beautiful healthy baby girl in September. They call her a "miracle baby" and they adore her.
Ariel Knights, pictured left with her fiance, he son and the 'miracle baby' girl she delivered in September (Facebook/Daily Mail)
The 22-year-old woman, pictured right before the delivery, filed the malpractice lawsuit last month alleging negligence on behalf of the clinic and two doctors (Facebook/Daily Mail)
Now that the pregnancy is over, Knights wants to know why the abortion clinic doctor thought the abortion was complete and what, if anything, was removed from her body during the procedure. That's why she's filed her malpractice lawsuit against the clinic and two doctors. She is seeking at least $25,000 for her pain and suffering.
The clinic and doctors are denying any negligence and challenge the lawsuit on several levels, according to court documents.
Meanwhile, the implications of the failed abortion are not lost on the mother of the "miracle baby."
"That's a sore subject to think about. I mean, it's just hard, thinking she's here and thinking, if they would have done their job… It's just something I don't like to think about," she told the Journal.
'Biden told them to come': Arizona border city on brink of collapse from illegal immigration, officials say
Ghislaine Maxwell says Jeffrey Epstein was murdered, claims Prince Andrew photo with Virginia Giuffre is 'fake'
Reporter tries to connect gas prices and race — but Energy Secretary Granholm refuses to buy it
Tim Allen responds after Pamela Anderson makes explosive allegation against him: 'He said it was only fair'
Xbox will force gamers to power down to fight climate change, touting the first 'carbon aware console'
M&M's walks back new woke 'spokescandies' after backlash, hires actress to promote brand instead: 'A spokesperson America can agree on'
JK Rowling shuts down trans activist with perfect two-word response that goes mega-viral
Watch Pfizer CEO's face when asked the one question he fears
British Army veteran arrested for silently praying for his dead son near an abortion clinic
Photo: Former Super Bowl champion slays massive mountain lion with bow and arrow after 200-pound beast slaughtered neighborhood dogs
SWAT officers shoot unarmed man wrongly suspected as hostage-taker — then officer blurts out, 'F***, bro, f***,' unaware of home cameras: Video


text:
See Girls Events
North America's Elite Hockey Event Series
Elite teams, strong competition, and great experiences away from the rink in some of the world's best cities!
The Music City Invitational – April 16-19, 2020
The kickoff event for the Brick series season takes place in Nashville, Tennessee at the Ford Ice Center. The Ford Ice Center is a Nashville Predators run facility. Games start on Thursday morning and finish on Sunday afternoon. Past champions include Toronto Pro Hockey (2016), Team Pacific (2017 and 2018) & Toronto Pro Hockey (2019).
Bauer Spring Shootout – May 8-10, 2020
The Bauer Spring Shootout is the opening event for both the '11's and 12's this season as the Brick series moves to beautiful Toronto, Ontario. The tournament is hosted by Pro Hockey Development. This storied tournament always draws a top field of teams.
Go to Event Site
The Boston Showdown – May 22-24, 2020
The Boston Showdown is an elite, AAA level spring hockey tournament hosted by the Junior Bruins over Memorial Day Weekend at the New England Sports Center (NESC) in Marlboro, MA. The Junior Bruins host the second stop for the Brick series for the 11's and 12's. The Boston Showdown is the top Boston based Elite, AAA spring/summer youth tournament.
The Battle for the Windy City – June 12-14, 2020
The Brick Series moves to Chicago as The Battle for the Windy City has the 2011's and 2012's playing in their final stop for before the championship events in Las Vegas and Vancouver, respectively. Chicago Elite AAA host the tournament at the Arctic Ice Arena and the rink and tournament hotels are a short drive from downtown Chicago and all that this world class city has to offer. Go see a Cubs game at Wrigley, hit the Magnificent Mile, spend time at the Navy Pier, head to the Willis/Sears Tower SkyDeck, Hancock Building/Water Tower, Millennium Park, Riverwalk or visit some of the best restaurants in the world. We suggest a steak at Gibson's.
Kings of Vegas – July 7-10, 2020
It's off to the Entertainment capital of the World for the 11's to finish the season. The KOV is a "must go to event" with the deepest field of the season. You will not have more fun at any other event. Past champions: Junior Bruins (2016), Team Brick Manitoba (2017), Montreal Snipers Elite (2018) & Montreal Mini Ducks (2019).
Pacific Rim Challenge – July 9-12, 2020
The final 2012 tournament of the season is hosted by the BC Jr. Canucks in one of the North America's most beautiful cities, Vancouver. This tournament will not only crown a champion but families will also be able to take in the sights of and experience this world class city. The Calgary Havoc (2016), Junior Bruins (2017), HPL West (2018) & Junior Bruins (2019) are past champions.
SoCal Freeze Out – July 16-19 2020
Presenting Sponsor: LA Kings
2007 Division and 2008 Division
The Brick series finishes its year in sunny California! World famous beaches, Hollywood, movie studios, Disney, Universal, Six Flags, Santa Monica Pier, Venice Beach, Rodeo Dr. and much more! The response has been "off the charts" with teams, players and families who loved the schedule, small field of elite teams, a "destination" location and great game times so that players and families can see the sights and enjoy a great family trip while also playing in an elite level tournament. The teams that have won the Big Surfboard trophy have been '05 CT. Jr. Rangers (2017) , '06 Team Pacific (2018), '06 Toronto Pro Hockey (2019) & '07 Team Pacific (2019).
Tweets by @theBrickseries
© 2020 The Brick Series.


Everybody's Market is an outdoor craft and vendor show held at the beautiful Floyd B. Olson Park in Thief River Falls on Saturday, September 8 from 8 a.m. – 2 p.m.. The market is free to the public. If you are interested in being a craft/merchandise vendor for the 2018 Everybody's Market call 218-681-3720 or info@trfchamber.com.


text:
43 user 89 critic
Lady Chatterley (2006)
R | 2h 48min | Drama, Romance | 1 November 2006 (France)
A French adaptation of the second (and much less well-known) version of D.H. Lawrence's erotic tale.
Pascale Ferran
Roger Bohbot, Pascale Ferran | 2 more credits »
Marina Hands, Jean-Louis Coulloc'h, Hippolyte Girardot | See full cast & crew »
43 user | 89 critic
Death of Danielle Darrieux by Richard Mowe - 2017-10-19 10:54:21
19 October 2017 | eyeforfilm.co.uk
'Doctor Who' exec producer Brian Minchin joins 'Sherlock' indie Hartswood Films
13 July 2017 | ScreenDaily
'Lady Macbeth' Review: Sex, Lies and Corsets – and One Jaw-Dropping Performance
12 July 2017 | Rolling Stone
I'm Kissin' in the Rain
TOP 30 Recent French Movies (2000-2019)
Cesar mejor película - Francia
César du Meilleur Film
César Award for Best Film
Search for "Lady Chatterley" on Amazon.com
Title: Lady Chatterley (2006)
Romantic Couples (Part: II)
11 wins & 11 nominations. See more awards »
Lady Constance Chatterley is married to the handicapped Sir Clifford Chatterley, who was wounded in the First World War. When they move to his family's estate, Constance (Connie) meets ... See full summary »
Stars: Joely Richardson, Sean Bean, James Wilby
Lady Chatterley's Lover (1981)
A film adaptation of D.H. Lawrence's novel. After a crippling injury leaves her husband impotent, Lady Chatterly is torn between her love for her husband and her physical desires. With her ... See full summary »
Director: Just Jaeckin
Stars: Sylvia Kristel, Shane Briant, Nicholas Clay
Young Lady Chatterley (1977)
Cynthia inherits her aunt's large estate and moves in. She reads her aunt's diary and finds out (and graphically imagines) how she was taught in the ways of love by her gardener in 1901 at ... See full summary »
Director: Alan Roberts
Stars: Harlee McBride, Peter Ratray, William Beckley
Little Lili (2003)
A group of cinematic spend a holiday in the French countryside. The film provides insight in their relationships, including that between a young man and a local girl, Lili. She uses the ... See full summary »
Director: Claude Miller
Stars: Nicole Garcia, Bernard Giraudeau, Jean-Pierre Marielle
Nobody Else But You (2011)
Comedy | Crime | Mystery
A bestselling crime novelist who is desperately looking for a new story hones his focus on the apparent suicide of a small-town woman, an aspiring model who thought she was the reincarnation of Marilyn Monroe.
Director: Gérald Hustache-Mathieu
Stars: Jean-Paul Rouve, Sophie Quinton, Guillaume Gouix
Drawing some intriguing parallels between the work of the prostitute and that of the psychiatrist-both have clients, both charge for sessions, both take on roles that serve the needs, ... See full summary »
Director: Jeanne Labrune
Stars: Isabelle Huppert, Bouli Lanners, Sabila Moussadek
Leaving I (2009)
Suzanne is a well married mother, but her bourgeois lifestyle gets her down and she decides to go back to work as a physiotherapist by building an office in their backyard. Then Suzanne falls in love with the man hired to build the office.
Director: Catherine Corsini
Stars: Kristin Scott Thomas, Sergi López, Yvan Attal
Nathalie... (2003)
Nathalie is the name a Parisian prostitute assumes for a special mission or "private investigation." She is engaged in this unusual and secretive task by a professional, upper-middle-class ... See full summary »
Director: Anne Fontaine
Stars: Fanny Ardant, Emmanuelle Béart, Gérard Depardieu
The Story of Lady Chatterley (1989)
An Italian film adaptation of D.H. Lawrence's classic erotic novel. After a crippling injury leaves her husband impotent, Lady Chatterly is torn between her love for her husband and her ... See full summary »
Director: Lorenzo Onorati
Stars: Malù, Carlo Mucari, Maurice Poli
Early version of D.H. Lawrence's classic risqué novel about an aristocratic wife who has a passionate affair with her game keeper. French, dubbed in English. (1959; B&W)
Director: Marc Allégret
Stars: Danielle Darrieux, Leo Genn, Erno Crisa
House of Tolerance (2011)
At an elegant Parisian bordello at the dawn of the 20th century, exists a cloistered world of pleasure, pain, hope, rivalries, and most of all, slavery.
Director: Bertrand Bonello
Stars: Noémie Lvovsky, Hafsia Herzi, Céline Sallette
A divorced mother of two boys reaching adulthood decides to sell their house, find love and get on with her life away from her husband and sons; a decision that will lead to an escalating fraternal dispute.
Director: Joachim Lafosse
Stars: Isabelle Huppert, Jérémie Renier, Yannick Renier
Marina Hands ... Constance
Jean-Louis Coulloc'h ... Parkin
Hippolyte Girardot ... Sir Clifford Chatterley
Hélène Alexandridis ... Mrs. Bolton
Hélène Fillières ... Hilda
Bernard Verley ... Sir Malcolm
Sava Lolov ... Tommy Dukes
Jean-Baptiste Montagut ... Harry Winterslow
Fanny Deleuze ... Tante Eva
Michel Vincent ... Marshall
Colette Philippe ... Mrs. Marshall
Christelle Hes ... Kate
Jade Bouchard ... La jeune bonne
Joël Vandael ... Field, le chauffeur
Jacques De Bock ... Le médecin (as Jacques de Bock)
Sir Clifford has returned from the Great War to his estate near Sheffield, paralyzed from the waist down. Lady Constance, his young wife, cares for him, but she's lifeless, enervated. Her physician prescribes the open air, and she finds a quiet retreat at the hut - the workplace - of Parkin, the estate's gamekeeper. The rhythms of nature awaken Connie - daffodils, pheasant chicks - and soon she and Parkin become lovers. She's now radiant. Parkin, too, opens up. Class distinctions and gender roles may be barriers to the affair becoming more. Connie's trip to France, with her father and sister, bring the lovers to a nuanced resolution. Written by <jhailey@hotmail.com>
female pubic hair | f rated | unhappy marriage | female removes her clothes | panties | See All (189) »
Based on one of the most scandalous novels of our time
Rated R for sexuality and graphic nudity | See all certifications »
Official site [Spain]
Belgium | France
1 November 2006 (France) See more »
Amantul doamnei Chatterley See more »
Château de Montmery, Ambazac, Haute-Vienne, France See more »
$32,814, 24 June 2007, Limited Release
$687,414, 2 December 2007
Maïa Films, Saga Film (I), Arte France Cinéma See more »
168 min | 220 min (2 parts) (TV)
Dolby Digital | DTS
This movie is based on an alternate draft of D.H. Lawrence's novel unpublished until after his death, hence why the game keeper is called "Parkin" instead of "Mellors". See more »
When the chauffeur is bringing Lady Chatterley home at the end the car is being driven on the right. In England one drives on the left. See more »
Version of Young Lady Chatterley (1977) See more »
Well-tempered Clavichord, Book I, Fugue No.2, BWV.847
Composed by Johann Sebastian Bach
A beautiful movie about the awakening of a woman's senses!
30 May 2007 | by marie-gentiane1 – See all my reviews
I have seen the BBC adaptation of the DH Lawrence novel made by Ken Russell with Joely Richardson and Sean Bean and there is no comparison: I prefer the French adaptation even if the film is not always faithful to the book on some points (for example, in the book, Sir Clifford is having problems with his miners and his employees because he is very arrogant but in the film, Pascale Ferran does not mention these problems). The actors are maybe a little more good-looking in the BBC version but that's about it (sorry, Sean Bean). And if you want to see a film about a beautiful but bored, aristocratic woman whose sensuality is suddenly re-awakened by her meeting with the sullen, unsociable but virile Parkin/Mellors, then this film is for you. Pascale Ferran seemed to have focused her film on the love-story between Lady Constance/Connie and Parkin, the gamekeeper and the discovery or re-discovery of one's senses. That is why you have beautiful shots of nature, of magnificent trees in spring and why you have many scenes in which Constance is walking in the forest and just listening to the songs of birds. The forest is also the place where she discovers her own sensuality. The actors are brilliant, they magnificently show all sorts of emotions on their faces and the love-making scenes are all made with much reserve, with subtlety...It is all refined and very beautifully-done. I loved this Connie, I could relate to her and I loved the long pauses and the looks between the two leads, the big shots on the hands, on some legs or other parts of the body and some refined clothes. The costumes are also important. This movie reminds me a little of some scenes of The Piano by Jane Campion and if you enjoyed The Piano, I am sure you will like this French adaptation. Definitely a 'must-see'. It is a little long, more than 2 hours and a half, I think but if you are used to watching long BBC period dramas like me, you will have no fear in watching this!


text:
About Rabbi Rosen
Thoughts & Commentary
Weekly Torah
Video Commentary
Favorite Texts
Rabbi Jeremy Rosen
Rabbi Jeremy Rosen's Opinions and Commentary
Jeremy Rosen / December 18, 2005
So the International Red Cross has voted to accept Israel as a member so long as Israel uses a diamond (with a Star inside) as its symbol. "Proper" religions like Christianity and Islam will use their Crosses and Crescents but all the rest have to make do with the diamond. Why am I not ecstatic? Obviously because the only honest decision would have been to make everyone do the same thing and use the diamond, and everyone then puts inside it whatever symbol they want. But in a world where international agencies tend to make conflicts worse, I guess I shouldn't be surprised. Disappointed, but not surprised.
Symbols are trivial but very dangerous things. For millions of people the Cross is a source of comfort and reassurance. But if it has been held over you or your relatives while they were being burnt, raped or slaughtered, then the Cross is a hated symbol of pain and oppression. The same can be said of the Crescent, the Star and Sickle and, of course on a far less comparable level, (except for Iranian Presidential half-wits) the Star of David, the Magen David.
If you are wearing the wrong football shirt in Istanbul there is a serious chance of getting stabbed, and in parts of England having a broken beer bottle shoved in your face. And if you wear a kippa or a hijab in parts of France you run the risk of violence (and sometimes from the same source). Religion, Politics or Sport are all often the excuse for mindless thugs to use violence. In America there is an ongoing debate fuelled by the Christian Right over what symbols for Xmas can or cannot be used and whether religious symbols altogether conflict with America's separation of State and Religion. In New York the Menorah is almost as ubiquitous as Father Xmas.
If it were just a matter of symbols, frankly I wouldn't be bothered. After all, the Star of David, from a historical Jewish point of view is a totally unimportant and a relatively recent import. It is not mentioned or to be seen in Biblical Judaism. In the Talmud the term is used once only, and then it used not of a shield, but to refer to one the blessings in the daily prayers (Pesachim 117b) and the same goes for later halachic sources.
I'm reluctant to say it never appears anywhere in early Jewish decorative motifs (though the swastika does!) because I'm not an archaeologist. But I have never seen it on reproductions of decorations of early Jewish buildings and it is not until medieval Prague that it appears in synagogues.
My own view is that as a variation of the magical symbol, the Pentangle, it was forced on medieval Jews as a symbol when they were made to identify themselves with some external sign. As they were accused of being league with witches and devils, this was foisted upon them and, in turn, they transformed it into a badge of honor. Others argue it found its way into Judaism as a kabbalistic symbol. Given that much of medieval Kabbalah was imported from astrology and alchemy, its not farfetched.
But then why associate it with King David? Just as oppressed Jews invented the Super Hero myth of the Golem, who would rampage and destroy the enemies of the Jews, so they yearned for a Super Hero, a King David and his legions of fighting men to come to their rescue. And in time secular Zionism, in need of a symbol, preferred this less obviously religious symbol to the more traditional Menorah.
Historically, the real Jewish symbol was the Seven Branched Menorah (not to be confused with the Eight Branches we use on Chanuka). The Menorah was a symbol of peace, of Heavenly presence. In the Tabernacle and in the two Temples the "eternal light" was the western light on the Menorah that was kept burning perpetually. And in Zechariah's famous imagery it is a symbol not of human physical force but of spiritual strength.
Interestingly the Menorah was and is also the official symbol of the Jewish State. So what's all this about the Magen David? It is in effect the symbol of Jewish physical strength! But is that really a Jewish value? It is true, once upon a time we took on the world's toughest armies. In Roman times Jews were known as the best mercenaries. In the Arabian Peninsula once, Jewish tribes were the fiercest and, of course, nowadays we can take care of ourselves! But what is our "natural" state?
Jacob is described as "A Simple Man". But he was hardly "simple" and neither was he a wimp! After all he single-handed rolled a huge boulder off the mouth of a well, he faced off Laban and his sons, battled with an aggressive angel and stood up to Esav. He was certainly capable of defending himself. But he was a "complete" man, not one sided. He could be as peaceful and as sensitive as he could fight if necessary.
The sort of strength I admire is the strength that knows when to be soft. And that is the real strength of Israel and the symbolism of the Menorah, not the reliance on magic or total physicality. Which is, of course, why the Talmud does not glorify Judah Macabee's military victories, but instead the spirit that kept a religious flame alive.
The Star of David means nothing to me religiously, though it does have a special place in my affections precisely because of its association with Jews and a modern Jewish homeland. My ideal would be for Israel to put a Menorah inside that diamond. And then I might feel less angry at the hypocrisies of those, like Esau, who can only fight using dishonest tactics and deviousness.
The Cuckoo Coup
About Jeremy Rosen
View all posts by Jeremy Rosen →
Fools and Their Folly
It's That Time of Year!
2 thoughts on "Symbols"
zeevveez says:
Please read Uri Ofir's research about the origin of the Star of David
http://star-of-david.blogspot.com/2006/04/jewish-origin-of-star-of-david.htm
Jeremy Rosen says:
That should be http://star-of-david.blogspot.com/2006/04/jewish-origin-of-star-of-david.html
jeremyrosen2014 on The Cuckoo Coup
Jeremyrosen@msn.com on The Cuckoo Coup
Steven in uk on The Cuckoo Coup
Archives Select Month January 2021 (2) December 2020 (5) November 2020 (4) October 2020 (5) September 2020 (4) August 2020 (4) July 2020 (5) June 2020 (4) May 2020 (3) April 2020 (4) March 2020 (4) February 2020 (4) January 2020 (5) December 2019 (4) November 2019 (4) October 2019 (5) September 2019 (4) August 2019 (5) July 2019 (4) June 2019 (4) May 2019 (5) April 2019 (4) March 2019 (4) February 2019 (4) January 2019 (5) December 2018 (4) November 2018 (4) October 2018 (5) September 2018 (4) August 2018 (5) July 2018 (5) June 2018 (4) May 2018 (5) April 2018 (3) March 2018 (4) February 2018 (5) January 2018 (4) December 2017 (4) November 2017 (5) October 2017 (6) September 2017 (6) August 2017 (90) July 2017 (164) June 2017 (4) May 2017 (4) April 2017 (4) March 2017 (5) February 2017 (4) January 2017 (4) December 2016 (5) November 2016 (4) October 2016 (4) September 2016 (5) August 2016 (4) July 2016 (5) June 2016 (4) May 2016 (4) April 2016 (5) March 2016 (4) February 2016 (4) January 2016 (5) December 2015 (4) November 2015 (4) October 2015 (5) September 2015 (4) August 2015 (4) July 2015 (6) June 2015 (5) May 2015 (5) April 2015 (4) March 2015 (4) February 2015 (4) January 2015 (5) December 2014 (5) November 2014 (4) October 2014 (5) September 2014 (3) August 2014 (4) July 2014 (5) June 2014 (4) May 2014 (5) April 2014 (4) March 2014 (4) February 2014 (4) January 2014 (5) December 2013 (4) November 2013 (4) October 2013 (5) September 2013 (3) August 2013 (5) July 2013 (4) June 2013 (4) May 2013 (4) April 2013 (4) March 2013 (4) February 2013 (3) January 2013 (6) December 2012 (4) November 2012 (5) October 2012 (4) September 2012 (4) August 2012 (5) July 2012 (4) June 2012 (4) May 2012 (5) April 2012 (4) March 2012 (5) February 2012 (4) January 2012 (5) December 2011 (5) November 2011 (4) October 2011 (4) September 2011 (5) August 2011 (4) July 2011 (5) June 2011 (4) May 2011 (4) April 2011 (4) March 2011 (5) February 2011 (4) January 2011 (4) December 2010 (5) November 2010 (8) October 2010 (8) September 2010 (6) August 2010 (8) July 2010 (10) June 2010 (8) May 2010 (8) April 2010 (9) March 2010 (8) February 2010 (10) January 2010 (8) December 2009 (6) November 2009 (4) October 2009 (5) September 2009 (4) August 2009 (4) July 2009 (5) June 2009 (4) May 2009 (4) April 2009 (4) March 2009 (4) February 2009 (5) January 2009 (4) December 2008 (3) November 2008 (5) October 2008 (4) September 2008 (4) August 2008 (4) July 2008 (6) June 2008 (8) May 2008 (4) April 2008 (4) March 2008 (8) February 2008 (6) January 2008 (4) December 2007 (5) November 2007 (4) October 2007 (3) September 2007 (3) August 2007 (4) July 2007 (5) June 2007 (3) May 2007 (1) April 2007 (4) March 2007 (4) February 2007 (1) January 2007 (4) December 2006 (4) November 2006 (3) October 2006 (2) September 2006 (3) August 2006 (4) July 2006 (4) June 2006 (4) May 2006 (3) April 2006 (2) March 2006 (4) February 2006 (4) January 2006 (5) December 2005 (5) November 2005 (3) October 2005 (4) September 2005 (6) August 2005 (5) July 2005 (4) June 2005 (2) May 2005 (1) April 2005 (1) February 2005 (3) January 2005 (1) December 2004 (4) November 2004 (2) October 2004 (1) September 2004 (1) August 2004 (2) July 2004 (3) June 2004 (3)
Follow Me Here:


text:
WWF'S PANDA AMBASSADOR PROGRAM
Your Commitment
Saving Nature Together
You've Pitched In. You've Done Your Part.
and now you're ready to do more
The Panda Ambassador program is the ultimate next level of engagement for those committed to saving wildlife and the environment while supporting WWF. Your enthusiasm, ideas, and unique perspective, plus our worldwide reach and expertise, equals an unstoppable force for good. Together we can make a real, lasting impact on the future of our planet.
Panda Ambassadors are on the frontlines of environmental activism, leading their communities to engage the public and inspire real change. Panda Ambassadors host fun and educational events and activities, lead groups in marches and protests, and meet with politicians and business leaders.
We're always looking for people who are ready to lead an environmental movement today, and who might just be leading the country tomorrow. If you think you've got what it takes, apply today.
Become a Member of our Panda Ambassador Community
Already a Panda Ambassador?
Access the Panda Ambassador Toolkit
Forget the Status Quo
We don't have to continue the same destructive practices of previous generations. There are new, innovative, Earth-friendly ways to do everything. Our job as Panda Ambassadors is to show others that there are viable alternatives to the status quo.
We Wildlife
Like you, we're big fans of the incredible diversity of life on Earth. Our Panda Ambassadors help mobilize on the local level, championing legislation to protect at-risk species, and curbing demand for illegal products both in our communities and on the world market.
This Panda Has Your Back
The good news is that as a Panda Ambassador, you're not alone. Across the country our ambassadors are connected to share resources, ideas, experiences, and support. You'll also be part of the WWF family—a network of experienced scientists and experts working on behalf of the planet.
Panda Ambassadors impact the world around them in countless ways.
The first step to behavior change is education. As a Panda Ambassador, you'll explain to others how environmental issues can affect… read more
Creating a better world doesn't have to be a chore. Panda Ambassadors inspire people to care about the planet by having fun and connecting on a… read more
Panda Ambassadors are the on-the-ground leaders of a new environmental movement, responsible for drumming up the local support that allows… read more
The first step to behavior change is education. As a Panda Ambassador, you'll explain to others how environmental issues can affect their lives, why they should care, and what they can do to help. Panda Ambassadors give presentations, host and attend events, and have one-on-one chats with community leaders. As an ambassador for WWF in your community, you will demonstrate the local relevance of global issues like climate change, wildlife crime, and food scarcity. You'll also help people understand how their individual actions, behavior, and purchases have a global impact.
Creating a better world doesn't have to be a chore. Panda Ambassadors inspire people to care about the planet by having fun and connecting on a deeper level. It's your creativity, new ideas, and enthusiasm that will make the most difference. Some ambassadors engage the public through works of art, creative and persuasive writing, hosting athletic activities like yoga or running, or even hosting parties with music and dancing. You are encouraged to leverage your talents and interests, whatever they may be, to attract others and get them involved.
Panda Ambassadors are the on-the-ground leaders of a new environmental movement, responsible for drumming up the local support that allows WWF to achieve big wins. You'll lead your community's participation in international WWF initiatives like Earth Hour and climate marches. You'll coordinate support for changes in policy, laws, and business practices. You'll stand up for your community—be it a college campus or an entire city—and lead it toward a more sustainable, Earth-friendly future.
Together We're unstoppable
Jennifer Tribble
I think the most important thing people can do to help save the planet is to vote! Find candidates and propositions that support environmental ...
Being a Panda Ambassador has been an empowering experience that I am grateful to be a part of. I would encourage anyone who is looking to do more to help make...
Steven Zampieri
After months of watching the US government take a regressive approach on environmental issues (including its stance on fossil fuels...
Why did you decide to apply to the Panda Ambassador program?
Before applying to the program, I followed WWF's projects and advocacy work. In particular, I appreciate the work that WWF does bridging science to effective advocacy and environmental work across the world. When I saw the Panda Ambassador program, which was an opportunity to engage locally and raise awareness around some of WWF's priority projects, I knew I wanted to be a part of that group.
What do you think is the most important thing people can do to help save the planet?
Vote! Find candidates and propositions that support environmental protections, and use your vote to elect representatives who will fight for our planet and our natural resources.
What gives you hope for the future?
I have a lot of hope for the future! One thing that gives me hope is seeing the younger generation standing up to fight for our planet and sustainability. There are so many kids doing inspirational and groundbreaking things, whether that's fighting through legal battles, advocacy work, or starting their own companies. I am also inspired by the number of companies, large and small, that are shifting toward more sustainable products and manufacturing methods.
Being a Panda Ambassador has been an empowering experience that I am grateful to be a part of. I would encourage anyone who is looking to do more to help make the world better to apply to the program.
What have you done as a Panda Ambassador that you are most proud of?
Participating in Lobby Day this year was incredibly rewarding for me. I never really pictured myself getting an opportunity like that. I really enjoyed listening to presentations on how to tell our story, meeting other Panda Ambassadors, and practicing the day before we met with our representatives.
When it comes to the environment it's easy to feel overwhelmed and paralyzed at the sheer magnitude of what we're facing. But doing something that feels manageable (even if it seems small and ridiculous) can be impactful. If you've never worked out in your life, you don't wake up one morning and go run a marathon. You build up to it. Sometimes painfully slowly. The same is true about taking action on the environment.
I'd say it's more like determination than hope. Given everything happening both abroad and domestically—it's a lot to handle. Plus, I think if you are just blindly hopeful about the future, you're not really paying attention. But that's not a reason to stop fighting. The only thing I can give, is everything I've got—and I think a healthy, sustainable planet is worth fighting for.
After months of watching the US government take a regressive approach on environmental issues (including its stance on fossil fuels, national parks funding, and the Paris climate accord), I felt like I needed to get involved. Since the health of the planet is reflected by the health of the animals around us, I'm hopeful that if we're able to take care of them, they'll actually be taking care of us. WWF's Panda Ambassador program is a great fit for me, allowing me to keep my day job and still have an impact.
Lobby Day in March was a terrific experience. I felt energized by hearing from other Panda Ambassadors, getting a deeper understanding of important legislation, and connecting directly with our elected officials to let them know that voters care about environmental issues and expect Congress to act accordingly.
Tweak our lifestyles to reduce our carbon footprints—recycle, eat less meat, buy fewer things that last longer—and generally be conscious of what we take from the world around us. If we all try to take a little less and give back where possible, we'll make tremendous strides toward a better, more sustainable world.
I'm encouraged by the surging numbers of consumers and employees who seek out companies that give back socially and environmentally, and I'm hopeful that this demand can create a positive feedback loop that sets us on the right track for sustainability.
As a Panda Ambassador you can stop worrying about problems and start solving them.
Not ready to become a Panda Ambassador yet? Don't worry you still can make a difference.


text:
Leopoldo Jacinto Luque (født 3. maj 1949 i Santa Fe, Argentina, død 15. februar 2021) var argentinsk fodboldspiller, der som angriber på Argentinas landshold var med til at vinde guld ved VM i 1978 på hjemmebane. Han scorede fire mål for argentinerne på vej mod titlen. Han deltog også ved Copa América 1975. I alt spillede han 45 landskampe og scorede 22 mål.

På klubplan spillede Luque for adskillige klubber i hjemlandet, dog mest nævneværdigt hos River Plate og Unión. Han havde også ophold i Brasilien hos Santos FC.

Referencer

Eksterne henvisninger
 Footballdatabase.eu spillerinfo
 National-Football-Teams.com spillerinfo

Fodboldspillere fra Argentina
Fodboldspillere fra Rosario Central
Fodboldspillere fra Racing Club de Avellaneda
Fodboldspillere fra Santos FC
Fodboldspillere fra Club Atlético River Plate
Verdensmestre i fodbold
Deltagere ved verdensmesterskabet i fodbold 1978

redpajama_set_name: RedPajamaWikipedia


We were approached by our client after their original supplier let them down – more than 18 months into the project! We stepped in, developing the hardware and an innovative control system with a simple wizard-based approach to setup and operation. The whole development was completed in less than 6 months, and our client had only one complaint – they no longer needed to include a two week training course with each machine, as two days was now more than enough.
The machine can be used for Isokinetic, and Isotonic exercises. There is also a facility for CPM.
Isokinetic exercise is where the body's movements are constrained to a fixed speed. The idea is that the patient tries to move faster and therefore can apply different torques at different joint positions. An isokinetics machine can be used by physiotherapists to diagnose and monitor a range of joint and muscle injuries.One simple use is to determine the difference between real joint injury and fabricated injuries. Insurance companies sometimes look for Physio assesments for injuries before paying out large sums. On a real injury the amount of torque that can be applied is usually directly linked to the amount of pain in the joint. On a real injury this is always at the same point. For a fabricated injury the joint position varies greatly. By plotting torque against joint position for multiple repetitions of an exercise the fabricated injury is usually very clear.
Isotonic exercise is where the torque is kept constant and the subject is asked to move as quickly as possible. This sort of exercise can simulate weight training environments for example and can be used to build up stamina.
CPM, or continuous passive motion, is generally where the joint is assisted in its movement. Typically there is little or no subject input, in that the machine does all the movement. However this aspect of the machine is good for extending joint movement ranges, and is often used to rehabilitate subjects after critical joint operations.
The control system was developed in conjunction with research physiotherapists based in Leeds University. It was specifically designed to guide clinicians through the setup process step by step in a straight forward manner – giving pictures of the tools and set up options as they went along so that results across machines and clinicians were consistent for any given subject. This was a first for the market, where different machines or clinicians would regularly get different results.
The biggest problem on this project was the torque gauge – which was so sensitive it picked up mechanical ringing in the metal framework of the machine. We developed a targetted filter that could remove this 'noise' while still leaving the real picture for the clinician. All of this had to be done in realtime as the torque graphs were displayed on the PC screen as the subject carried out the exercise pattern. Ground breaking work also ensured that the machine's gauges were correctly calibrated so that a 10Kg weight weighed in correctly at every angle at which it was measured. At the time of development, no other Isokinetics machine on the market could make this claim while the 'arm' was moving.


text:
The Mid-Week Beat: Rachel Wong – Here's to the Indies!
This week on the Mid-Week Beat, in the spirit of Thanksgiving, we want to say how thankful we are for all the incredible independent musicians out there. We are thankful that these musicians continue to get out there and make great original music despite all the hardships that go into trying to build a music career.
If you are an independent artist, don't get discouraged if you haven't achieved "success" in the industry sense of the word. You are doing something that most folks don't get an opportunity to do: pursuing your dream. You do what you love, often times while working day jobs, raising kids and enduring all the other stresses of daily life.
Independent musicians' undying perseverance is something to be admired. Many nights are spent loading gear in and out of venues, waiting around for hours during soundchecks, sometimes to only play to a handful of people. But if they weren't out there persevering, music fans would never be fortunate enough to discover the musical gems that sometimes appear out of nowhere. Chances are your favorite artists had many years of hard work behind them before they got the recognition they deserved.
Case in point, Brown Paper Tickets' own Rachel Wong. When Rachel isn't working wonders with our digital marketing, she's often found playing her unique brand of acoustic pop in local coffee shops, at community festivals or, sometimes, on TV!
Influenced by the late Michael Jackson, John Mayer, Lauryn Hill, James Morrison and Sara Bareilles, Rachel mixes a soulful vocal style with beautiful pop melodies. Her music is infused with self-determined passion and her unique perspective as an Asian American woman. This determination has helped her garner international recognition as tracks off of her debut album Curtain Fall can now be heard on radio stations in Canada and the Philippines.
Rachel beat out over 3,000 bands in the US to secure her top 12 finalist spot for Ford's Gimme the Gig II Contest. As part of the contest, she was able to showcase her original music in front of Grammy-award winning producer Don Was and renowned sound engineer Krish Sharma for a KTLA TV feature.
Tags: Brown Paper Tickets, Christmas Zoo Lights, Ford's Gimme the Gig II Contest, independent musicians, Leavenworth's Christmas Lighting Festival, Letters to You, music, Northgate Mall, rachel wong, singer/songwriters, Thanksgiving, The Mid-Week Beat, The Oregon Zoo.


text:
Diocese's catechists have creatively taught God's love during pandemic
By: Jennifer Willems - September 22, 2021 - Featured Article
With catechists and members of the RCIA team standing behind him, Father Donald Levitt, pastor at Christ the King Church in Moline, extends his hand in blessing to include parents and grandparents as witnesses to the Catholic faith in their families on Catechetical Sunday, Sept. 19. (The Catholic Post/Jennifer Willems)
COVID-19 made it difficult, but catechists around the Diocese of Peoria found new and creative ways to teach young people about God's love, the friendship of Jesus, and why it's important to live their faith all day, every day. Last Sunday they were praised for their ongoing efforts as parishes celebrated Catechetical Sunday.
This year's theme was "Say the Word and My Soul Shall Be Healed."
"For me, religious education is super important because there's nothing else you can learn in life that is more important than that," said Susan Taylor, sacraments and family life coordinator at St. Matthew Parish in Champaign. "That's eternal. That's forever."
Lucia Bertram shows a page from the Children's Bible to her kindergarten students at Christ the King Parish in Moline. The religious education program there expanded to include the kindergarten this fall. (The Catholic Post/Jennifer Willems)
She said everyone at the parish shares the same goal, which is to make saints.
"We're wanting people to attain that heavenly goal and that's what drives us to do everything that we do, so we can all get there together."
"The catechetical program isn't going to run without our volunteers," Patty Scott, director of religious education at Christ the King Parish in Moline, told The Catholic Post. "It isn't going to run without the adults coming forward and sharing their knowledge of the faith and sharing their own personal faith journey. It's something they do out of the goodness of their heart because they love their Catholic faith."
"We have a really good selection of teachers. They're all very much dedicated to the kids and to continuing the teaching of the faith," said Joanne Bibb, who coordinates a co-parish ministry between Holy Family and St. Paul in Danville with Jennifer Martendill. "I feel like we're really blessed."
Msgr. Mark Merdian, pastor of St. Pius X Parish in Rock Island, also used the word "dedicated" to describe the lay people involved in the religious education program that includes not only St. Pius X, but St. Mary and Sacred Heart in Rock Island, as well.
"They deserve a lot of honor and credit," he said, noting their love for the children they teach and their desire to impart "the beautiful gift of faith."
That included a lot of flexibility as catechists employed a variety of methods to make that possible during the pandemic.
"We were going to make it work — and we did," Scott said of her discussion with Father Donald Levitt, pastor of Christ the King, before classes started last year. "We made it work, just reassuring the families and the parents that everything was going to be fine and we were going to work through this. Their children were going to be safe."
That meant starting with in-person instruction, going to Google Meets for a time when diocesan schools went to remote learning, and then finishing with in-person instruction. Students had their own pencil boxes filled with supplies, so there was no cross contamination, and they were seated two to a table, all facing the same direction.
Everyone who entered the Believers Together Center or St. Francis Hall for class had to wear a mask that covered their mouth and nose, and hand sanitizer was available outside every classroom. The same protocols continue this year, Scott said.
Classes at Christ the King are not only meeting in person, but the program has expanded to include kindergartners this fall. After every class they take home a handout they can work on with their parents.
In Danville, they were determined to have safe, socially distanced classes in the parish hall at Holy Family rather than do remote learning.
"We felt the students were already doing so much of that as it was that we didn't want to have one more thing they would do remotely," Martendill said. "It's just important to get the kids out and have that sense of community."
Bibb said they maintained safety by arranging students for in grades one through four and five through eight to meet on alternate weeks. This year everyone is back on Wednesday nights and masks are a must.
Confirmation preparation was rearranged this year, however, so that the seventh and eighth grades are combined until the end of the year. In January, Father Steven Loftus, pastor at Holy Family, will work with the eighth-graders to complete their sacramental formation.
GROWTH AS A FAMILY
In Rock Island, students have traditionally met in classrooms at Jordan Catholic School and Farrell Hall — both on the campus of St. Pius X. Last year's classes were offered remotely, with teachers either holding online sessions at the usual time on Wednesday afternoons or uploading videos and lessons to Class Dojo and then making themselves available for discussion and questions.
The exception was sacramental preparation for First Communion and confirmation, which was held in person, according to Msgr. Merdian.
"Those are such important contact times when kids can learn about Holy Communion and then eventually the retreat you do for the kids are so important," he said.
Sessions at St. Matthew were held online through myCatholicFaithDelivered.com last year and that continues this year since COVID-19 is still making its presence known, Taylor told The Post. Students preparing for First Communion and confirmation meet in person to make certain they are getting everything they need.
The new component this year is "Discipleship and Donuts," which is usually offered the first Sunday of the month. It starts with a Family Mass at 8 a.m. and leads to a presentation for families about a particular topic.
The first one focused on family prayer and provided an opportunity for those who attended to make a plan to grow their faith as a family this year, Taylor explained.
"The whole point is parents are called to be witnesses and not just teachers," she said. "We're really just trying to pull everyone together to learn about their faith and live that out at home," she said.


Complete with a homemade graham-cracker-crumb crust, this dish really is the ultimate summer pie.
Preheat oven to 325°. Pulse first 4 ingredients in a food processor 15 times or until almonds are finely ground. Press on bottom and up sides of a 10-inch pie plate. Bake 10 to 12 minutes or until golden brown. Cool completely (about 2 hours).
Meanwhile, whisk together fruit juice and cornstarch in a small bowl. Stir together honey and salt in a small saucepan, and cook over medium-low heat 3 to 4 minutes or until mixture begins to bubble. Whisk in fruit juice mixture. Increase heat to medium, and bring to a boil, whisking often. Remove from heat, and cool completely (about 10 minutes). Cover and chill until ready to use.
Beat heavy cream in a medium bowl at medium speed with an electric mixer until stiff peaks form.
Beat cream cheese at medium speed with a heavy-duty electric stand mixer until smooth; gradually add condensed milk, beating until blended after each addition. Add next 5 ingredients, and beat at medium-high speed until smooth and creamy. Fold in whipped cream. Pour mixture into cooled pie crust, and chill 12 to 24 hours.
Place fruit slices in a large bowl; add half of chilled juice mixture, tossing to coat. (If mixture is too thick, place in a microwave-safe bowl, and microwave at HIGH 30 seconds.) Spoon fruit onto chilled pie, and serve immediately with remaining juice mixture. Or chill remaining juice mixture, and reserve for another use, such as a topping for ice cream.
Followed the directions exactly and ended up with a delicious and impressive dessert. The presentation was lovely. Waiting for it to chill/set up was the longest 12 hours of my life.


text:
Tuscaloosa Woman Arrested with Marijuana, 3 Pounds of Edibles, 275 Ecstasy Pills
Stephen Dethrage Published: April 5, 2022
(Tuscaloosa Police Department)
A 43-year-old Tuscaloosa woman was arrested and charged with 11 felonies after narcotics agents reportedly found a large stockpile of illegal drugs in her home on 24th Street Monday.
Stephanie Taylor, a spokesperson for the Tuscaloosa Police Department, said their agents executed a search warrant at a home in the 2600 block of 24th Street Monday.
Inside, they allegedly recovered a pound of marijuana, three pounds of edibles containing THC, a small amount of cocaine and hundreds of prescription pills, including 275 MDMA, better known as ecstasy, 40 oxycodone and 25 morphine pills.
The agents also seized $700 cash in the residence.
The suspect, Victoria Lashun Yelder, was charged with possession with intent to distribute a controlled substance, trafficking morphine, trafficking Oxycodone, two counts of possession of a controlled substance, first-degree possession of marijuana and five counts of failure to affix a tax stamp.
She was booked in the Tuscaloosa County Jail Monday and is being held on a combined bond set at a total of $167,500 for all charges.
Her arrest follows a similarly large drug bust early Monday that yielded more than a pound of marijuana and a large amount of deadly and addictive fentanyl.
For more updates on crime and courts coverage in West Alabama, stay connected to the Tuscaloosa Thread.
Most Shocking Crime Stories of 2021
Top Stories from the Tuscaloosa Thread (3/28 - 4/3)
16 of the Top Stories published by the Tuscaloosa Thread during the week of March 28th, 2022.
Filed Under: Featured, West Alabama Narcotics Task Force
Categories: Articles, Crime and Courts, Local Politics, News


Included: Swiss Arms Compact 5x42E Scope with weaver/picatinny rings(Item#:CG63863), metal AK sight mount, 250mah trickle charger and 1100mah mini battery.
This is the Airsoft version of the most popular weapon of the 20th Century. Equipped with two different colored pistol grips (black and earth brown) which can be switched by simply taking out a single screw. There are also two 550 rd high capacity magazines, one black, one brown. The AKM has an all metal body including the barrel, receiver, and sights. The only plastic on the gun is the grips and stock. The receiver is detailed with authentic Kalashnikov trademarks. This airsoft AKM is built to last with an all metal gearbox filled with steel gears. This means the AKM can stand up to the stress of fully automatic fire. The electric airsoft AKM is also built with an adjustable SPIN UP accuracy system for maximum range and accuracy. These solid internal workings allow the AKM to fire at an impressive 445 FPS with .12g BBs and 380 FPS with 0.2g BBBs.


Medoc designed by Michele De Lucchi and Philippe Nigro for the Natural Genius Collection.
Its original and unmistakable trapezoidal shape draws on the tapered shape of wooden logs. At the same time, Medoc's design creates visual continuity with old planks, "when planks were not straightened so as to avoid wasting wood unnecessarily". The imprecise sawn cut surface (or sawn wood technique) requested by the designers enhances the light effects, the tactile feeling and 3D effect of Listone Giordano's French Oak. The colour shades obtained with natural oil-based treatments give Oak a distressed look by simulating the effects of exposure to the elements.
With a degree in architecture from Florence, he was at the forefront of movements such as Cavart, Alchymia and Memphis during the years of radical and experimental architecture. In 1987, after years of studies, he designed Tolomeo for Artemide, the table lamp with which he won his first Compasso d'oro award. It soon became the archetype of the lamp with adjustable arms. From 1988 to 2002 De Lucchi was at the head of the Olivetti Design department for which he designed laptops, monitors, printers, faxes and computers. He received his second Compasso d'oro in 2001 thanks to his design of the Olivetti Artjet 10 printer. During his long career he developed experimental projects for Compaq Computers, Philips, Siemens and Vitra.
He designs buildings and exhibitions for museums such as the Triennale in Milan, Palazzo delle Esposizioni in Rome, Neues Museum in Berlin, the "Cini" Foundation in Venice and the Gallerie d'Italia in Piazza della Scala in Milan. In 1990 he set up a Private Production, as part of which De Lucchi designs products without being commissioned for them, using handmade techniques and skills.