text:
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.browser.tasks.tab_management;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.tasks.tab_management.PriceMessageService.PriceMessageType;
import org.chromium.chrome.browser.tasks.tab_management.suggestions.TabSuggestion;
import org.chromium.chrome.tab_ui.R;
import org.chromium.testing.local.LocalRobolectricTestRunner;
import org.chromium.ui.modelutil.PropertyModel;

import java.util.List;

/**
 * Unit tests for {@link MessageCardProviderMediator}.
 */
@RunWith(LocalRobolectricTestRunner.class)
public class MessageCardProviderMediatorUnitTest {
    private static final int SUGGESTED_TAB_COUNT = 2;
    private static final int TESTING_ACTION = -1;

    private MessageCardProviderMediator mMediator;

    @Mock
    private MessageCardView.DismissActionProvider mUiDismissActionProvider;

    @Mock
    private Context mContext;

    @Mock
    private TabSuggestionMessageService.TabSuggestionMessageData mTabSuggestionMessageData;

    @Mock
    private PriceMessageService.PriceMessageData mPriceMessageData;

    @Mock
    private Supplier<Boolean> mIsIncognitoSupplier;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        doReturn(false).when(mIsIncognitoSupplier).get();
        doNothing().when(mUiDismissActionProvider).dismiss(anyInt());
        mMediator = new MessageCardProviderMediator(
                mContext, mIsIncognitoSupplier, mUiDismissActionProvider);
    }

    private void enqueueMessageItem(@MessageService.MessageType int type, int tabSuggestionAction) {
        switch (type) {
            case MessageService.MessageType.TAB_SUGGESTION:
                when(mTabSuggestionMessageData.getSize()).thenReturn(SUGGESTED_TAB_COUNT);
                when(mTabSuggestionMessageData.getActionType()).thenReturn(tabSuggestionAction);
                when(mTabSuggestionMessageData.getDismissActionProvider())
                        .thenReturn((messageType) -> {});
                when(mTabSuggestionMessageData.getReviewActionProvider()).thenReturn(() -> {});
                mMediator.messageReady(type, mTabSuggestionMessageData);
                break;
            case MessageService.MessageType.PRICE_MESSAGE:
                when(mPriceMessageData.getPriceDrop()).thenReturn(null);
                when(mPriceMessageData.getDismissActionProvider()).thenReturn((messageType) -> {});
                when(mPriceMessageData.getReviewActionProvider()).thenReturn(() -> {});
                when(mPriceMessageData.getType()).thenReturn(PriceMessageType.PRICE_WELCOME);
                mMediator.messageReady(type, mPriceMessageData);
                break;
            default:
                mMediator.messageReady(type, new MessageService.MessageData() {});
        }
    }

    @Test
    public void getMessageItemsTest() {
        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.CLOSE);

        Assert.assertEquals(1, mMediator.getMessageItems().size());
        Assert.assertTrue(mMediator.getReadyMessageItemsForTesting().isEmpty());
        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().isEmpty());
    }

    @Test
    public void getMessageItemsTest_TwoDifferentTypeMessage() {
        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.CLOSE);

        Assert.assertEquals(1, mMediator.getMessageItems().size());
        Assert.assertTrue(mMediator.getReadyMessageItemsForTesting().isEmpty());
        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().isEmpty());

        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);

        Assert.assertEquals(2, mMediator.getMessageItems().size());
        Assert.assertTrue(mMediator.getReadyMessageItemsForTesting().isEmpty());
        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().isEmpty());
    }

    @Test
    public void getMessageItemsTest_OneMessageForEachMessageType() {
        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.CLOSE);
        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.GROUP);
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);

        List<MessageCardProviderMediator.Message> messages = mMediator.getMessageItems();
        Assert.assertEquals(2, messages.size());
        Assert.assertEquals(MessageService.MessageType.TAB_SUGGESTION, messages.get(0).type);
        Assert.assertEquals(MessageService.MessageType.FOR_TESTING, messages.get(1).type);

        Assert.assertEquals(2, mMediator.getShownMessageItemsForTesting().size());
        Assert.assertTrue(mMediator.getShownMessageItemsForTesting().containsKey(
                MessageService.MessageType.TAB_SUGGESTION));
        Assert.assertTrue(mMediator.getShownMessageItemsForTesting().containsKey(
                MessageService.MessageType.FOR_TESTING));
    }

    @Test
    public void getMessageItemsTest_ReturnFirstMessageFromMultipleSameTypeMessages() {
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);

        List<MessageCardProviderMediator.Message> messages =
                mMediator.getReadyMessageItemsForTesting().get(
                        MessageService.MessageType.FOR_TESTING);
        Assert.assertEquals(2, messages.size());
        final MessageCardProviderMediator.Message testingMessage1 = messages.get(0);
        final MessageCardProviderMediator.Message testingMessage2 = messages.get(1);

        messages = mMediator.getMessageItems();
        Assert.assertEquals(1, messages.size());
        Assert.assertEquals(testingMessage1, messages.get(0));

        Assert.assertEquals(1, mMediator.getShownMessageItemsForTesting().size());
        Assert.assertEquals(testingMessage1,
                mMediator.getShownMessageItemsForTesting().get(
                        MessageService.MessageType.FOR_TESTING));

        Assert.assertEquals(1, mMediator.getShownMessageItemsForTesting().size());
        Assert.assertEquals(testingMessage2,
                mMediator.getReadyMessageItemsForTesting()
                        .get(MessageService.MessageType.FOR_TESTING)
                        .get(0));
    }

    @Test
    public void getMessageItemsTest_PersistUntilInvalidationOccurred() {
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);

        List<MessageCardProviderMediator.Message> messages =
                mMediator.getReadyMessageItemsForTesting().get(
                        MessageService.MessageType.FOR_TESTING);
        Assert.assertEquals(2, messages.size());
        final MessageCardProviderMediator.Message testingMessage1 = messages.get(0);

        // Test message is persisted.
        for (int i = 0; i < 2; i++) {
            messages = mMediator.getMessageItems();
            Assert.assertEquals(1, messages.size());
            Assert.assertEquals(testingMessage1, messages.get(0));
        }

        // Test message updated after invalidation, and the updated message is persisted.
        mMediator.invalidateShownMessage(MessageService.MessageType.FOR_TESTING);
        messages = mMediator.getMessageItems();
        final MessageCardProviderMediator.Message newMessage = messages.get(0);
        Assert.assertEquals(1, messages.size());
        Assert.assertNotEquals(testingMessage1, newMessage);
        for (int i = 0; i < 2; i++) {
            messages = mMediator.getMessageItems();
            Assert.assertEquals(1, messages.size());
            Assert.assertEquals(newMessage, messages.get(0));
        }
    }

    @Test
    public void getMessageItemsTest_ReturnNextMessageIfShownMessageIsInvalided() {
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);

        List<MessageCardProviderMediator.Message> messages =
                mMediator.getReadyMessageItemsForTesting().get(
                        MessageService.MessageType.FOR_TESTING);
        Assert.assertEquals(2, messages.size());
        final MessageCardProviderMediator.Message testingMessage1 = messages.get(0);
        final MessageCardProviderMediator.Message testingMessage2 = messages.get(1);

        messages = mMediator.getMessageItems();
        Assert.assertEquals(1, messages.size());
        Assert.assertEquals(testingMessage1, messages.get(0));

        mMediator.invalidateShownMessage(MessageService.MessageType.FOR_TESTING);

        messages = mMediator.getMessageItems();
        Assert.assertEquals(1, messages.size());
        Assert.assertEquals(testingMessage2, messages.get(0));

        mMediator.invalidateShownMessage(MessageService.MessageType.FOR_TESTING);
        Assert.assertEquals(0, mMediator.getMessageItems().size());
    }

    @Test
    public void invalidate_allMessages() {
        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.CLOSE);

        mMediator.messageInvalidate(MessageService.MessageType.TAB_SUGGESTION);

        Assert.assertFalse(mMediator.getReadyMessageItemsForTesting().containsKey(
                MessageService.MessageType.TAB_SUGGESTION));
        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().containsKey(
                MessageService.MessageType.TAB_SUGGESTION));

        // Testing multiple Messages has the same type.
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);

        mMediator.messageInvalidate(MessageService.MessageType.FOR_TESTING);
        Assert.assertFalse(mMediator.getReadyMessageItemsForTesting().containsKey(
                MessageService.MessageType.FOR_TESTING));
        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().containsKey(
                MessageService.MessageType.FOR_TESTING));
    }

    @Test
    public void invalidate_shownMessage() {
        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.CLOSE);

        mMediator.getMessageItems();
        mMediator.invalidateShownMessage(MessageService.MessageType.TAB_SUGGESTION);

        verify(mUiDismissActionProvider).dismiss(anyInt());
        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().containsKey(
                MessageService.MessageType.TAB_SUGGESTION));
        Assert.assertFalse(mMediator.getReadyMessageItemsForTesting().containsKey(
                MessageService.MessageType.TAB_SUGGESTION));

        // Testing multiple Messages has the same type.
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);
        enqueueMessageItem(MessageService.MessageType.FOR_TESTING, TESTING_ACTION);

        mMediator.getMessageItems();
        mMediator.invalidateShownMessage(MessageService.MessageType.FOR_TESTING);
        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().containsKey(
                MessageService.MessageType.FOR_TESTING));
        Assert.assertTrue(mMediator.getReadyMessageItemsForTesting().containsKey(
                MessageService.MessageType.FOR_TESTING));
    }

    @Test
    public void buildModel_ForClosingTabSuggestion() {
        String closingTabSuggestionMessage = "Closing Tab Suggestion";
        doReturn(closingTabSuggestionMessage)
                .when(mContext)
                .getString(R.string.tab_suggestion_close_stale_message);

        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.CLOSE);

        PropertyModel model = mMediator.getReadyMessageItemsForTesting()
                                      .get(MessageService.MessageType.TAB_SUGGESTION)
                                      .get(0)
                                      .model;
        Assert.assertEquals(MessageService.MessageType.TAB_SUGGESTION,
                model.get(MessageCardViewProperties.MESSAGE_TYPE));
        Assert.assertEquals(closingTabSuggestionMessage,
                model.get(MessageCardViewProperties.DESCRIPTION_TEXT_TEMPLATE));
    }

    @Test
    public void buildModel_ForGroupingTabSuggestion() {
        String groupingTabSuggestionMessage = "Grouping Tab Suggestion";
        doReturn(groupingTabSuggestionMessage)
                .when(mContext)
                .getString(R.string.tab_suggestion_group_tabs_message);

        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.GROUP);

        PropertyModel model = mMediator.getReadyMessageItemsForTesting()
                                      .get(MessageService.MessageType.TAB_SUGGESTION)
                                      .get(0)
                                      .model;
        Assert.assertEquals(MessageService.MessageType.TAB_SUGGESTION,
                model.get(MessageCardViewProperties.MESSAGE_TYPE));
        Assert.assertEquals(groupingTabSuggestionMessage,
                model.get(MessageCardViewProperties.DESCRIPTION_TEXT_TEMPLATE));
    }

    @Test
    public void buildModel_ForPriceMessage() {
        String titleText = "Price drop spotted";
        doReturn(titleText).when(mContext).getString(R.string.price_drop_spotted_title);

        enqueueMessageItem(MessageService.MessageType.PRICE_MESSAGE, -1);

        PropertyModel model = mMediator.getReadyMessageItemsForTesting()
                                      .get(MessageService.MessageType.PRICE_MESSAGE)
                                      .get(0)
                                      .model;
        Assert.assertEquals(MessageService.MessageType.PRICE_MESSAGE,
                model.get(MessageCardViewProperties.MESSAGE_TYPE));
        Assert.assertEquals(titleText, model.get(MessageCardViewProperties.TITLE_TEXT));
    }

    @Test
    public void getMessageItemsTest_UpdateIncognito() {
        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.CLOSE);

        PropertyModel messageModel = mMediator.getMessageItems().get(0).model;
        Assert.assertFalse(messageModel.get(MessageCardViewProperties.IS_INCOGNITO));

        doReturn(true).when(mIsIncognitoSupplier).get();
        messageModel = mMediator.getMessageItems().get(0).model;
        Assert.assertTrue(messageModel.get(MessageCardViewProperties.IS_INCOGNITO));
    }

    @Test
    public void getNextMessageItemForTypeTest_UpdateIncognito() {
        enqueueMessageItem(
                MessageService.MessageType.TAB_SUGGESTION, TabSuggestion.TabSuggestionAction.CLOSE);

        PropertyModel messageModel =
                mMediator.getNextMessageItemForType(MessageService.MessageType.TAB_SUGGESTION)
                        .model;
        Assert.assertFalse(messageModel.get(MessageCardViewProperties.IS_INCOGNITO));

        doReturn(true).when(mIsIncognitoSupplier).get();
        messageModel =
                mMediator.getNextMessageItemForType(MessageService.MessageType.TAB_SUGGESTION)
                        .model;
        Assert.assertTrue(messageModel.get(MessageCardViewProperties.IS_INCOGNITO));
    }

    @Test
    public void isMessageShownTest() {
        Assert.assertFalse(mMediator.isMessageShown(
                MessageService.MessageType.PRICE_MESSAGE, PriceMessageType.PRICE_WELCOME));
        enqueueMessageItem(MessageService.MessageType.PRICE_MESSAGE, -1);
        // Mock pulling this message, which will move the message from mMessageItems to
        // mShownMessageItems.
        mMediator.getNextMessageItemForType(MessageService.MessageType.PRICE_MESSAGE);
        Assert.assertTrue(mMediator.isMessageShown(
                MessageService.MessageType.PRICE_MESSAGE, PriceMessageType.PRICE_WELCOME));
        Assert.assertFalse(mMediator.isMessageShown(
                MessageService.MessageType.PRICE_MESSAGE, PriceMessageType.PRICE_ALERTS));
    }
}

redpajama_set_name: RedPajamaGithub


text:
What's a Doctor?
I just want to take a moment to talk about how ridiculous Dr. Drew Pinsky is all of the time.
He's a medical doctor. Graduated in medicine in 1984. Specializes in addiction medicine.
Shut up, Dr. Drew.
First of all, your credentials don't really give you the expertise to counsel young girls about their pregnancies and marriages. So stop it.
What really gets me is that he time and time again has stated that parents of twins are more likely to get divorced than parents of singletons.
The study he's using is one based out of Massachusetts that uses information from the 1980 census to say that parents of twins are one percent more likely to divorce than parents of singletons.
Anyone that knows statistics knows that you can't even count one percent. It's part of the error margin, unless your study is inhumanly precise. Secondly, there's just not enough information to make a conclusion from one year's census. What the study says is that people who had twins as their firstborn children in the late 1970s were one percent more likely to divorce than parents of singletons in the late 1970s. What about all the other years, all the other parents? What about all the other factors that determine divorce? Like the age of the couple when they first get married for instance, since he most recently used this statistic on Teen Mom.
I'm not saying there's nothing to that study, I'm just saying don't pass it off the way you do. "You know, statistically, parents of twins are more likely to divorce than parents of singletons."
I just don't buy it.
Add that to his blowhard attitude, his I'm-everybody's-friend-as-long-as-they're-making-me-money stance, and his long career of crap, and I'm tuning out.
Before he even graduated medical school, he was on the radio as "Ask a Surgeon." He's not a surgeon.
He did ads for 1-800-GET-THIN.
He co-founded a site on the internet for teens to get advice, named after himself, of course. Ran out of funding and no longer exists. Shame.
He's a reality rock-God and for that, I don't fault him. Get it, gurl, get your money. Lord knows, I'd do the same.
But don't say stupid things. Don't say you'd frame Lindsey Lohan for drugs to get her into rehab if you were her father. That's not hyperbole. Look it up. I think you'll find it's more along the lines of assholery.
You've got plenty of credentials and plenty of great things to say. Just stop when you run out of them. Don't make bridges that aren't there, and don't pretend to be everything you are not.
A doctor who plays one on TV.
Give the triplets a kiss for me as I sit here and pray for your marriage, since God knows how many of those fall apart. Do you have a study based on numbers from 1965 you could perhaps pull out of your pocket?
Oh, and PS - Adam Carolla was the best part of Loveline.
PPS - What even is this? How are you qualified, and notice how you say nothing.
If you like this blog, please vote for it here at Babble's Top 100 Blogs list.
Labels: babies, celebrity rehab, children, divorce, dr. drew, dr. drew pinsky, parenting, teen mom, television, twin parent divorce rate, twins
I am known, in this house, for occasionally yelling, "I will PUNCH YOU IN YOUR FACE, Dr. Drew!" at the television.
parentwin March 1, 2012 at 5:42 PM
I laughed out loud. HAH.
Renub February 4, 2020 at 1:26 AM
Renub Research is a Market Research and Consulting Company. We have more than 10 years of experience especially in international Business-to-Business Researches, Surveys and Consulting. We provide wide range of business research solutions that helps companies in making better business decisions. We partner with clients in all sectors and regions to identify their highest-value opportunities, address their most critical challenges, and transform their businesses. Our wide clientele comprises of major players in Life Sciences, Information Technology, Telecom, Financial Services (Banking, Insurance), Energy, Retail, Manufacturing, Automotive, and Social sector. Our clients rely on our market analysis and data to make informed knowledgeable decisions. We are regarded as one of the best providers of knowledge. Our pertinent analysis helps consultants, bankers and executives to make informed and correct decisions. Our research reports offer a blend of information insight, analysis and forecasting that is essential in today's ultra-competitive markets.
Toddler Tricks - 86: Make a Deal
Little Girl Excitement
I Give my Kids Chocolate Milk for Breakfast
Guest Post - How to Encourage Good Behavior at You...
Cake Pops - A Review
Recipe Monday - Zucchini Muffins
Moment of the Week - 85: Making Up Songs
Toddler Tricks - 85: Make the Old New
Threshold of Pain
Guest Post: Twin Talk - Is it Real, and Should it ...
What They Say at Three and a Half
The Man and the Tiny Elephant
Recipe Monday - Lobster Tails
Moment of the Week - 84: Mad Hatters
Toddler Tricks - 84: Make them Acknowledge You
What's Important?
Rights Clashing with Rights is Wrong
Reasons my Children Cry
Recipe Monday - Easy Homemade Strawberry Shortcake
Moment of the Week - 83: Mexican Food...Approximated
Toddler Tricks - 83: Parents, Use your Words
A Parent's Road is a Tired One
Can. You. Hear. Me?
Once-ler Upon a Time
The Sickness Olympics
Recipe Monday - Bacon Cheese Chicken
Moment of the Week - 82: Surprise Naps!
Toddler Tricks - 82: Choices
Bringing a Knife to a Gun Fight

redpajama_set_name: RedPajamaCommonCrawl


A small group of elementary schools are experimenting this year with grab-and-go options and strategically placed kiosks to try to convince more students to eat breakfast at school. The goal is to learn lessons that can be applied across the district.
Free breakfast has long been a priority of groups such as the School Nutrition Association and No Kid Hungry. They cite studies showing that eating breakfast increases attendance and reduces behavior problems in school, alongside academic gains.
They've also been relatively uncontroversial. While the federal school lunch program has been criticized about its waste and cost by groups such as North Carolina's conservative John Locke Foundation, few opponents have lined up against breakfast programs.
CMS offers free breakfast to students at no cost to the district, Hobbs said. The federal government contributed $9.9 million last year to the program. The state chipped in $125,000.
Free breakfasts in schools appear to be catching on nationwide. The School Nutrition Association reported that the number of children eating breakfast at school increased by more than 3 percent last year, to 13.6 million, largely based on growth in free breakfast programs.
Now, CMS has brought in a team from UNC-Chapel Hill's Center for Health Promotion and Disease Prevention to figure out how the district can boost participation in its program.
They're working with three elementary schools – Montclaire, Pinewood and Berryhill – using a grant from the insurance company-affiliated Aetna Foundation to learn what might work.
"We said, 'Breakfast is free, why aren't you eating it?' " said Frederick Gilbert, area supervisor in CMS child nutrition services.
Students at Montclaire Elementary in southwest Charlotte begin streaming into the cafeteria around 7:15 a.m. for a breakfast that looks a lot different than it was last year.
Then, you took a tray through the line, loaded it up and sat at cafeteria tables to eat. Now, kids grab a milk and a bag full of choices to take to their classrooms. On Tuesday, choices included a hot muffin or breakfast pizza, a cheese stick, a box of Rice Chex or Trix cereal, apple slices, orange juice or apple juice, and a milk.
There were logistical changes, too: Buses drop students off on the other side of campus, so students have to walk by the cafeteria before arriving at their classrooms. They installed softer lighting in the cafeteria to make it more inviting. They put in a new serving line to make it easier to get to the food. And administrators and teachers cajole the kids daily to get themselves something to eat.
The district is trying similar changes at Berryhill. At Pinewood, the school is targeting students who arrive late with a breakfast cart near where cars drop off.
The new system isn't perfect. The line Tuesday morning at Montclaire backed up near the check-out station, where kids put in their five-digit ID numbers to log that they picked up a breakfast. Gilbert said the school is planning to bring in a new check-out line to speed things up.
The full results of the changes are yet to be seen. But through the first 14 days of class, Gilbert said the school had served 1,400 more meals. Before, the school was serving about 250 breakfasts each morning. Now it's closer to 400. The school has about 700 students.
Principal Emily Miles said she's seeing a less tangible benefit.
Despite growth at CMS being below expectations, more students are eating breakfast across the state and country than they were a few years ago.
In 2013, nearly 420,000 students participated in the school breakfast program in North Carolina, up 14 percent from 2009, according to federal data. The government spent about $115 million on the program last year, up 32 percent from 2009. The numbers include both free and paid breakfasts.
Wake County, the largest school district in the state, is testing the universal free breakfast model at eight elementary schools this year. Durham County's public school system also launched a free breakfast program at all schools this year.
Christina Powell, a first-grade teacher at Montclaire in Charlotte, said she isn't sure whether the changes this year are having an effect, but said it makes a difference when students eat before class.


Posted March 21, 2019 by Kathy & filed under Uncategorized.
Drop in to Scrap & Bean Sunday, March 31st for an oracle reading with Denise. An Expressive Art Practitioner and Intuitive Artist, Denise has been offering readings for 20 years. Using a deck created from her own art work, her readings are geared towards the recipient's connection with their authentic self, and the unfolding of personal and spiritual empowerment. Her readings are compassionate, loving, and often sprinkled with gentle humour. Denise is offering 3-card 15/minute readings for $20. Payment is direct to Denise via cash or etransfer at the time of your reading.


The custom of paying a parting tribute of respect to departed merit derives from a deep-seated and most natural feeling in the human heart. So it is with great sadness we report here the passing on of Worcestershire Royal Arch Masons. They will all be greatly missed.


This may seem very daft, but i bought some Carlube LHM+ mineral based fluid & was going to top up the car (leaky pump) but it wasnt green in colour, so i thought perhaps i have the wrong stuff?? Is it just citroen Total lhm which is green & everyone else is just normal oily colour? & is it ok to mix them?
I thought all LHM was green, the stuff that the C5 uses is redish, but then thats no LHM is it.
The C5 used LDM I think. Something like that!
I bought 4 litres of Morris LHM+ for £3 a bottle from GSF today to replace the hydraurincage which has been in there for a couple of months. I hope it's ok. Has anyone tried this ? It seems a pretty good price. I haven't opened it yet, but if it's not green it's not going in.
Normally, LHM/LHM+ is green, Milspec 556 is beige, (aviation hydraulic fluid), Renard is blue (made in Holland and rumoured to be Milspec with additives), Dexron ATF is red and the stuff in C5s I understand is orange.
Seems strange that it would be a different colour as the colour of most things made under licence is set down as part of the conditions of the licence agreement.
I think you'll find that LHM and LHM + are blended to a formulation laid down by Citroen. It could be that the formulation stipulates the colour - certainly it is generally accepted that the stuff is green, its successor and predecessor are different colours.
How much has the LHM cost you? How much will it cost to repair your car if the stuff damages it? Do you like a gamble?
It looks like normal oil colour, sort of translucent? i paid about 16 quid for 4.5 litres & was assured that it was suitable, but i would rather not take the risk, i think i will take it back & get an explanation.
Use only where lhm, lhm+, Citroen B71 2710 or ISO 7308 is recommended by the vehicle manufacturer.
Carlube LHM+ is a mineral based hydraulic fluid that can be used in certain citroen applications - Brake, self-levelling & power steering systems.
It even states that its also suitable for certain Rolls-Royce & Bentley's.
It may be perfectly alright - Citroen themselves say that even engine oil can be used in an emergency - but you are only going to find out one way.
I've never heard of Carlube - but many people have never heard of Morris Oils - and I've been using them for 15 or 20 years - and they must be OK as they or their directors have a Sentinel stem lorry as a toy.
I'm seeing Ken tomorrow, so will show him the LHM that i have to get his opinion, dont want to wreck anything..... but thanks to everyone's input so far. Once i have seen Ken i will post another reply on this thread.
Aren't Carlube the people who make all those fuel additives ?
ellevie wrote: I bought 4 litres of Morris LHM+ for £3 a bottle from GSF today to replace the hydraurincage which has been in there for a couple of months. I hope it's ok. Has anyone tried this ? It seems a pretty good price. I haven't opened it yet, but if it's not green it's not going in.
Yes, started to use this when I was leaking from the Octopus & continued using it It seems no different to other LHM.
Morris would appear to have the edge on price.


Are Cary High Schools better than Chapel Hill High Schools?
Ask that question to a parent from Chapel Hill and you'll get a NO, our high schools are the best in the state! After all that's one of the reason they pay more for a home and pay higher taxes than Cary families.
In the last 6 months the median price for a home in Cary was $345,000 for 2800 sq ft. In the Chapel Hill school district(includes Carrboro) the median sold price was $399,900 for 2450 sq ft. The tax rate in Cary is .864 and is 1.54 in Chapel Hill.
Are Chapel Hill schools worth the extra cost?
Not everyone looks at the school rankings in the same way.
Chapel Hill/Carrboro City Schools have the highest SAT scores in the state. Property values are very high in Chapel Hill because of the schools. If you look at the top high schools there isn't a huge difference in SAT scores. Cary high schools are in the top 10.
AP classes are high school classes that give students advanced placement or college credit. This can really help out because a student with AP credit may be able to skip those huge introductory classes and go right to the good interesting upper level classes. It's money saving too.
Because AP classes are more challenging than regular classes they are usually weighted with a possible 5.0 grade point rather than the standard 4.0. In some Triangle schools with competitive students and lots of ap classes just taking a regular class in the arts can bring down a students grade point because the best grade possible is a 4.0. That's can be hard for a student with a passion for chorus or theatre. A 4.0 grade point just isn't good enough for some students and parents these days. One indication of how challenging a high school is can be the number of students taking AP tests and the scores they get. Scores range from 1-5 and usually a 3 or better is needed for college credit. Here are the Triangles High School AP test statistics.
Notice the participation rate at East Chapel High School compared with some of the other Triangle schools. It's a very competitive school.
Many of my clients use the ratings on GreatSchools.org to decide the best school for them. Out of 10 points, Chapel Hill High School is a 5 (#1 in SAT scores) and East Chapel Hill High is a 6 (#2 in SAT scores). Apex High is an 8 (7 in SAT scores) and Green Hope High in Cary is an 8 (#5 in state SAT scores) and Panther Creek High (9th in SAT's) in Cary is an 8. I'm not sure how accurate these scores are but many people choose what school they want their child to attend based on these scores.
US News and World Reports ranks the best high schools in the country. Carrboro High is ranked #2 in the state and 189 nationally. It only has a 5 Great Schools score. Northwood High in Chatham County in ranked #6 in the state and 899 in the US and has a 6 Great Schools score.
If you are looking for an excellent high school in an area with reasonably priced homes, Apex High would be a good choice. Unfortunately, along with 13 other Wake County schools the enrollment is capped. That means that even if Apex High is your base school you can't go there and will have to choose from an overflow school. I have more information on the Wake County (includes Cary) school assignments and capped schools in this post.
I know it's confusing. My best advice is to visit the schools and meet the principal. Then talk with parents about their experiences. If your timing is right try and go to the parent teacher open houses right before school starts. That will give you a good insight about the schools and lots of opportunity to talk with parents.


Victor Hugo's monumental novel of love, redemption and injustice during the years following the French Revolution became a musical in 1985. Now, Tom Hooper, director of Academy Award winning The King's Speech, brings us an epic film version of this much loved musical.
Ex-convict Jean Valjean (Hugh Jackman) avoids his life-long parole, working his way up the social ladder to become a factory owner and respected citizen while always looking over his shoulder for Inspector Javert (Rusell Crowe), who is resolutely pursuing him. In an effort to redeem himself, Valjean promises to care for Cosette (Amanda Seyfried), the child of a dying prostitute (Anne Hathaway). As Cosette matures in Paris, rebellion is brewing and she finds herself falling in love with rebel leader, Marius (Eddie Redmayne).
Hooper's epic musical film is powered by an array of evocative and poignant performances from his talented cast. Jackman grips his audience immediately in a heartbreaking take on the destitute and anguished Valjean, who is moved to tears by a religious man's act of kindness.
But, it is Anne Hathway's turn as Fantine, a beautiful woman brought low, that raises the bar for musical performances as she transfixes in an emotionally charged rendition of I Dreamed A Dream. Hathaway's tortured expressions, filled with pain and hopelessness, are the pinnacle of Les Miserables. It's a pity her screen time is so short lived.
Hooper's risky decision to record the vocals on set – rather than recording them earlier in a sound studio – clearly pays off, giving Les Miserables realism and intensity. Vocal performances overflow with feeling, benefitting from the actors' additional time spent in character alongside their fellow cast members.
A commitment to long takes that hold the gaze of the cast, further heightens the emotional impact of Les Miserables' musical pieces. Hooper's unusual shot composition – empty space above close-ups and the placing of his performers in the bottom left or right hand sides of the frame – makes for a commanding visual style. Tilted angles and occasional shaky camera's enhance movement and give Les Miserables an artistic visual style that reflects its theatrical roots. Hooper's dedication to such creative camera work builds incredible intensity. This is never more evident than during Javert's climactic struggle, where Hooper combines close-ups, extreme long shots, low and high camera angles, to powerful effect.
Almost all of the lines in Hooper's Les Miserables are sung and creative use of the camera compensates for some weaker vocals that inevitably creep in. That said, the medium of film brings with it a greater level of intimacy with the characters and the strength of Hooper's Les Miserables is the emphasis it places upon acting skill. Vocal power is much less of a concern here than in theatre (where projection is key), enabling voices to quieten, crack and split with emotion to create deeply moving and poignant scenes.
Visually, Hooper's film version should have a clear edge over any stage interpretation of Hugo's novel. With CGI readily available, the medium of film has the opportunity for intricately detailed skylines and exhaustively lifelike streets. Instead, the impressively photographed, wide-open landscapes of rural France give way to a more theatrical approach as Les Miserables moves forward into rebellion, where painted skies and hazy Parisian vistas place the performances centre stage.
Yet for all its strengths, Hooper's Les Miserables never seems to out-do its flawless exposition and, in the absence of an interval, begins to feel overlong. Valjean's rise through the classes and Fantine's degradation have much greater resonance and power than the subsequent love story between Cosette and Marius. While Redmayne's pure and heartfelt vocals propel emotion into the June rebellion – never more so than in his grief-stricken version of Empty Chairs And Empty Tables – Les Miserables never quite recaptures the gut-wrenching pathos of the film's earlier moments. From its visceral scenes of poverty, to the misery Hooper squeezes into every inch of the mise-en-scene, it is in the exposition where Hooper's Les Miserables is the most emotive.
The Verdict: In Les Miserables, Hooper creates an epic version of the established stage musical, driven by brave and powerful performances from a skilled cast. Demonstrating artistic flair and an audacious visual style, Hooper's Les Miserables raises the bar for film musicals.
One of my favorites of the year because it's a musical that hits all the right notes (pun intended), feels natural, and really hits you where it hurts. Just one of the better musicals I have seen in recent time. Good review Natalie.
Thanks. I agree it's one of the best musicals I've seen in the last few years. I'm pleased that it seems to be doing very well too, with some showings still selling out!
Nice review Natalie, I thoroughly enjoyed this and gave it the same score as you. I agree the second half of the film doesn't have the same energy as the first half and it does start to feel a little long. I also found Hooper's direction a little grating after a while, the constant close ups seem like he's trying to beat us around the head with the fact that we're not watching a stage musical.
Thanks. I can see why you felt that way about the close ups – there were so many! For me though, I think they worked as the cast were so terrific. Might have to see this one again, if only for the great performances in the first half.
Very good review. Gave it a 4/5 myself. This was one of my bigger surprises of the year.
Glad you liked it. Anne Hathaway made the movie for me – wish it could have sustained that level of drama all the way through so that I could have surrendered that fifth star!
Good review,(i wrote one myself today!)and i absolutely agree with you about the fact that the close ups worked with such a wonderful cast.I think the last good musical done was Chicago,it was about time that somebody made another good one!by the way i love the way you write!
Thanks very much for the kind words. Glad you enjoyed the movie. It really is the best musical in a long time – we were definitely due one!


Thank you for your enquiry. Someone will be in touch with you in the next 48 hours. For all urgent enquiries please call 1800 008 458. Thank you.
Central Locking - Our central locking is operation on all 3 doors and is seamlessly integrated into your Ford's existing central locking system, meaning no more extra sets of keys or bulking remotes. Bonus- the canopy tailgate also seals over the back tailgate effectively locking your tailgate as well.
LED door activated light - The ELITE canopy has a super bright LED interior light that will illuminate your Ford Ranger truck bed in even the lowest light conditions, What makes it even better is that it is automatically activated by all 3 doors so that you don't have to worry about pesky switches.
Rear window demister -The rear window of the ELITE comes standard with a heated demister that is integrated to your Ranger's 'in cabin' controls for perfect vision on even the frostiest of mornings.
Level Roof Line - Our signature level roof line not only looks great, it allows for the user to have the option of level Ford Ranger roof racks all the way across the vehicle.
Individual Styling - Being a hand built canopy, the ELITE is styled differently for each individual vehicle model and the ELITE canopy for Ford Ranger's is no exception!
The list of benefits of the ELITE canopy could go on! Hit the below Enquire button to learn more! The perfect accessory to go with your Ford Ranger ELITE canopy is the ProLift tailgate assist!


I guess this is where it begins. A trip to Cullowhee, North Carolina one weekend in November. Tasked with photographing a probate, and yet taking the time to breathe the mountain air.
I took a hike to Paradise Falls with an old friend who was an alumni of Western Carolina. As we began the hike it seemed that God was beginning to whipser through nature. The pathway being covered by dead leaves, but clear enough to still follow safely. The berries and mushrooms looking more like accessories for the trees.
As the air cooled and the surroundings change so did the feeling. Rushing water has a power unlike anything else; we just don't hear it often. And I didn't until my phone broke and I was disconnected from the outside world. All I had was what was in front of me. My camera. And then The Golden Moment was born.
At the beginning of the return trip we were approached by a stray dog. A frail animal with a bleak future. As the dog began to follow me I realized that saving this dog made sense in the moment. It was me and him, two strangers having to trust each other and accept that the other was there to do good. However, the dog was heavy, nervous and afraid; and the trek up to the entrance was just as perilous now that I was carrying an extra live load. But then we arrived, and now the dog and me will share that moment together.
If you've managed to read this far thank you. This is where it began, hidden deep within the beautiful wilderness I found my fire. This was equivalent to Link wandering in the Lost Woods and finding the Master Sword ("A Link To The Past" version). An unexpected trip, a broken cell phone and a handy camera is all it took for this to begin. I tell you this in hopes of letting you know that your passion may be coming in a way that you'd never expect it to.
I appreciate the love and attention you have shared with me thus far. I hope my images continue to show your what I see and how my world looks. And more importantly I hope this continues to make an impact in your life, no matter how big or small. Stay tuned there is much more to come these next few weeks. Be blessed.


Three times as many male as female pop stars appeared on last year's biggest hit singles, BBC research has found.
Ninety-one men or all-male groups were credited on the Official Chart Company's top 100 most popular songs of 2018 – compared with 30 female acts.
And despite the success of singers like Dua Lipa and Ariana Grande, the gender gap has grown over the past decade.
Thirteen of the most popular 100 songs of 2018 were credited only to female acts – down from 35 in 2008.
Clean your list easily with this desktop based email list cleaning software.
But female pop stars are doing well, aren't they?
Dua Lipa, Kacey Musgraves, Cardi B and Lady Gaga took the limelight and many of the top prizes at the Grammy Awards last weekend.
On Friday, Ariana Grande became the first female artist in UK singles chart history to replace herself at number one.
And women like Dua, Anne-Marie and Jorja Smith dominate the nominations for the Brit Awards, which will be handed out on Wednesday.
There are no fewer women in the UK charts now than there were a decade ago – in 2008, 30 female acts were credited on the best-selling 100 songs of the year. In 2018, the figure was still 30.
But the number of men has risen by more than 50% as the number of collaborations has grown over that time – from 59 men in 2008 to 91 in 2018. Which means the gender gap has grown.
It's become much more common for hit songs to be collaborations – Pop Star A "featuring" Pop Star B.
That means the total number of artists credited on songs in the end-of-year top 100 list has risen over the past decade.
You might have expected the number of men and women to have risen equally, but no. Only the number of male acts has risen.
What does that mean for the women?
In 2008, stars like Alexandra Burke, Duffy and Katy Perry were among the 35 female acts to have hit singles on their own.
Last year, that number was 13, including Dua, Ariana and Anne-Marie as well as Jess Glynne, Loren Allred and Rita Ora.
At the same time, the number of songs credited to both a female and a male act has risen from 10 to 25.
So songs by a man AND a woman have replaced many of those that were JUST credited to a single female act a decade ago.
Meanwhile, men are also collaborating more with other men – hence the steep rise in the overall number of male acts appearing on the top 100 singles.
But women are largely not collaborating with other women – or if they are, those songs aren't as popular. None of the top 100 songs of 2018 were collaborations just between female-only acts. But there's no change there – that was the same in 2008.
There's always been a gender imbalance in pop music – just think about the genders of the biggest stars of the past 60 years.
Part of the reason collaborations are now more common is because it's a good way for one act to get exposure with the fans of another – especially in the streaming age, when it's harder to break through. Often the other artist will be from a different genre.
And these days, the charts are dominated by dance and rap – which are both overwhelmingly male – at the expense of traditional pop, singer-songwriters and girl groups.
Dance music often has female vocalists, but the DJs/producers/hitmakers who they appear with – people like Calvin Harris, Marshmello, David Guetta, Zedd, Jax Jones – are almost always men.
In rap, Cardi B may have broken the glass ceiling but she is still far outnumbered by the likes of Drake, Post Malone, Macklemore, Kendrick Lamar and French Montana.
Singer Mabel, who had a hit last year with Fine Line (featuring Not3s) and is now in the charts on her own with Don't Call Me Up, says she is "very aware of the fact there's a long way to go".
She explains: "I think it's about encouraging young female artists, to give them the space to experiment. I think that's the issue.
Soul superstar John Legend said: "That's surprising when you have people like Adele, Taylor Swift, Selena Gomez, Ariana Grande – women who I think of as the biggest things in music right now.
"But I guess if you count those DJs [eg Calvin Harris and DJ Khaled], it's a little different because the voices people are hearing are women, even though it's the DJ's record.
Sarah Stennett, who runs First Access Entertainment, says she isn't surprised by the figures, and thinks a lot of it is down to the "gatekeepers" – the people who decide what gets promoted on streaming platforms, on the radio and at festivals.
They aren't sexist as individuals, but there is a "systemic" problem, she believes.
Collaborations are healthy, as long as it's an equal partnership and women aren't always relegated to being the featured artist, she adds.
"It's not really surprising that the number of artists has gone up, but it does seem counterintuitive that that should be so male-dominated," says Music Week magazine editor Mark Sutherland.
"If you feature more people on your record, the idea is that fans of that person are more likely to play it and get into it and repeat play it, and it crosses you over to different audiences in a way that's quite hard to do in a more streaming-orientated business.
Lara Baker, a music industry diversity consultant, says there has long been a gender imbalance in the charts and behind the scenes, but adds that the figures showing a growing gap are "really worrying".
"I'd like to see streaming platforms, festivals and radio stations giving more attention to equal representation than they currently do," she says.
"If you look at any of the major streaming playlists, or a radio station's playlist, or a festival line-up on any given day – chances are in many cases you'll find male artists taking up more slots than female artists.


There are several channels to reach the developers and the Flextype community to get direct assistance.
If you can't find the right answers to your questions on our Website, you can turn to one of our other official sources to get help and discuss your issues, but also to receive news and update notifications.
Got a question about setting up or using Flextype? We'll do our best to help you out. Also here you may start discussions about core, plugin and themes development.
If you want to report a bug or contribute your ideas, you can use the Flextype GitHub Issues tracker.
Follow Flextype on Twitter to get real-time news regarding the development and all events we are attending.


Late last night I suddenly got fed up with my iPhone.
Or rather, I got fed up with my iPhone habits – it's not the device's fault! I don't consider myself to be all that social media-obsessed. I just joined Facebook less than a month ago, and Instagram a few months before that. But even in that short amount of time, I felt the incredibly strong draw of the social media world. I'll find myself scrolling endlessly, reading articles I'm not even that interested in and listening to podcasts I don't care about just to have something to listen to. I recently began implementing Minimalism in my life so I have more time on my hands than before, but what's the use of freeing up extra time if I'm just going to waste it? So before I could convince myself not to, I deleted the apps for Instagram, Facebook, Pinterest and YouTube and unsubscribed from all of the podcasts I don't care about.
And it's just past noon!
This morning has been a great start to the experiment – I've gained a lot already. I'm going to see how long I can go without putting the apps back on my iPhone – hopefully once I've broken my habit of mindless feed-scrolling and can genuinely, intentionally enjoy them once again! Until then, I've got a big stack of books calling my name, my lace scarf only a quarter finished and a sweet little baby to take care of.
I too have deleted these apps, minus pinterest which I don't use, on my iphone and have found it quite liberating. I also have an app on my desktop which is really just an extension for Google Chrome which allows a certain time limit on websites that you choose and once you reach that time limit on that particular sight it blocks the site for the rest of the day. Thanks for your writing Victoria, I really enjoy it. Give my best to Galen.
I just wasted 15 minutes of my time composing, pecking out, and then somehow deleting a response to your message about wasting time. To summarize what I was working up to, may I suggest you spend more time sending pictures of my great-great niece to your great-uncle? And maybe even throw in a few of you and Galen?


text:
Q: Slow SQL query on join and subquery I'm writing a website user behaviour analyser tool as a hobby project. It tracks down user link clicks and pages they end up to from those links. It differentiates user sessions with unique UIN identifier within clicks.
I'm writing a milestone and click report from the data but the query is extremely slow. I haven't yet found out a way to increase the performance so that it would run reasonably fast (sub 5s execution time) so if anyone could help me that'd be greatly appreciated.
The part of the query below is very fast. Running time is close to 0.05s:
declare @startDate date = '2013-01-01'
declare @endDate date = '2016-01-14'
declare @user int = 4
declare @country int = 224

select
    p.PageId,
    p.Name,

    -- count of successful page landings
    SUM(CASE WHEN m.MileStoneTypeId = 1 AND m.UserId = @user
        THEN 1
        ELSE 0
        END) AS [Successful landings],

    -- count of failed page landings
    SUM(CASE WHEN m.MileStoneTypeId = 2 AND m.UserId = @user
        THEN 1
        ELSE 0
        END) AS [Failed landings],

    -- count of unfinished page landings
    SUM(CASE WHEN m.MileStoneTypeId = 3 AND m.UserId = @user
        THEN 1
        ELSE 0
        END) AS [Unfinished landings],

from
    Page as p
inner join
    Milestone as m
        ON p.PageId = m.CampaignId
        AND m.UserId = @user
        AND m.Created >= @startDate
        AND m.Created < @endDate
where
    p.PageCountryId = @country
group by
    p.PageId,
    p.PageName

Here is the full query which performs VERY slowly. The running time is something between 45-60 seconds. The difference is that I'm attempting to gather a count of clicks generated for a specific Page Milestone:
declare @startDate date = '2013-01-01'
declare @endDate date = '2016-01-14'
declare @user int = 4
declare @country int = 224

select
    p.PageId,
    p.Name,

    -- Unique clicks
    (SELECT
        COUNT(DISTINCT click.UIN)
     FROM
        Click as click
     WHERE
        click.PageId = p.PageId AND
        click.Created >= @startDate AND
        click.Created < @endDate AND
        click.UserId = @user
    ) as [Unique clicks],

    -- Total clicks
    (SELECT
        COUNT(click.UIN)
     FROM
        Click as click
     WHERE
        click.PageId = p.PageId AND
        click.Created >= @startDate AND
        click.Created < @endDate AND
        click.User = @user
     ) as [Total clicks],

    -- count of successful page landings
    SUM(CASE WHEN m.MileStoneTypeId = 1 AND m.UserId = @user
        THEN 1
        ELSE 0
        END) AS [Successful landings],

    -- count of failed page landings
    SUM(CASE WHEN m.MileStoneTypeId = 2 AND m.UserId = @user
        THEN 1
        ELSE 0
        END) AS [Failed landings],

    -- count of unfinished page landings
    SUM(CASE WHEN m.MileStoneTypeId = 3 AND m.UserId = @user
        THEN 1
        ELSE 0
        END) AS [Unfinished landings],

from
    Page as p
inner join
    Milestone as m
        ON p.PageId = m.CampaignId
        AND m.UserId = @user
        AND m.Created >= @startDate
        AND m.Created < @endDate
where
    p.PageCountryId = @country
group by
    p.PageId,
    p.PageName

Executing the click count queries as a standalone queries are reasonably fast. The running time is something close to 1 second for each (DISTINCT and non-distinct) query.
This is "fast" as a standalone query:
-- Unique clicks
(SELECT
    COUNT(DISTINCT click.UIN)
 FROM
    Click as click
 WHERE
    click.PageId = p.PageId AND
    click.Created >= @startDate AND
    click.Created < @endDate AND
    click.UserId = @user
) as [Unique clicks],

This is also "fast" as a standalone query:
-- Total clicks
(SELECT
    COUNT(click.UIN)
 FROM
    Click as click
 WHERE
    click.PageId = p.PageId AND
    click.Created >= @startDate AND
    click.Created < @endDate AND
    click.User = @user
 ) as [Total clicks],

The problem arises when I attempt to combine all in a single large query. For some reason standalone queries run very fast but the combined query execution time is extremely slow.
The table with clicks has a column "UIN" which is assigned for each user when they arrive to the website. When they click a link, a row is inserted to the Click -table with User Id and UIN. The UIN differentiates between user sessions, so UserId 4 with UIN abcdef123 can have multiple identical rows. This UIN is used to calculate unique clicks and total clicks within a user session.
The Page table has approximately 1000 rows. The Milestone table has approximately 200 000 rows and the Click table has approximately 10 000 000 rows.
Any idea how I can improve the performance of the full query with unique and total clicks included?
Here's the table contents and the target output
Data from Page table
+--------+-----------------------+-----------+
| PageId |         Name          | CountryId |
+--------+-----------------------+-----------+
|   3095 | Registration          |        77 |
|   3110 | Customer registration |        77 |
|   5174 | View user details     |        77 |
+--------+-----------------------+-----------+

Data from User table
+--------+------+
| UserId | Name |
+--------+------+
|      1 | Dan  |
|      2 | Mike |
|      3 | John |
+--------+------+

Data from Clicks table
+---------+--------------------------------------+--------+-------------------------+--------+
| ClickId |                 Uin                  | UserId |         Created         | PageId |
+---------+--------------------------------------+--------+-------------------------+--------+
| 1296600 | B420D0F4-20BE-49BE-AAC9-47DD858B68DD |   4301 | 2016-01-14 12:08:03:723 |   8603 |
| 1296599 | DA5877BA-8FF5-4671-8DF9-CCCBF1555BA1 |   4418 | 2016-01-14 12:07:46:930 |   2009 |
| 1296598 | C6790CB9-6DA6-4A8B-84AA-7D2D3A4B5787 |   4276 | 2016-01-14 12:07:43:563 |   8678 |
+---------+--------------------------------------+--------+-------------------------+--------+

Data from Milestone table
+-------------+-----------------+------------+--------+-------------------------+--------+
| MilestoneId | MilestoneTypeId | CampaignId | UserId |         Created         | PageId |
+-------------+-----------------+------------+--------+-------------------------+--------+
|           1 |               1 |       1001 |      4 | 2014-02-06 13:18:04:487 |     52 |
|           2 |               1 |       1001 |      4 | 2014-02-06 13:41:01:257 |   9642 |
|           3 |               1 |       1001 |      4 | 2014-02-07 09:52:29:373 |   2393 |
+-------------+-----------------+------------+--------+-------------------------+--------+

Here's the output data I'm trying to achieve:
+---------+-----------------------+---------------+--------------+----------------------+-----------------+---------------------+
| Page Id |       Page Name       | Unique clicks | Total clicks | Successfull Landings | Failed Landings | Unfinished Landings |
+---------+-----------------------+---------------+--------------+----------------------+-----------------+---------------------+
|    3095 | Registration          |           102 |          116 |                    2 |               0 |                   0 |
|    3110 | Customer registration |             3 |            6 |                    1 |               1 |                   0 |
|    5174 | View user details     |            13 |           13 |                    0 |               1 |                   0 |
|    5178 | Edit content page     |            11 |           11 |                    1 |               0 |                   0 |
|    6217 | Add new vehicle       |            18 |           18 |                    2 |               0 |                   0 |
+---------+-----------------------+---------------+--------------+----------------------+-----------------+---------------------+

A: Clickstream data can be very hard to deal with, often due to the volume of records generated.  But in this case I think the problem is due to the use of correlated subqueries in the SELECT clause.  If you are not familiar; a correlated subquery is any subquery that refers to the outer query.  These harm performance because the SQL engine is forced to evaluate the query once for each row returned.  This undermines the set based nature of SQL.
I've made some changes to your sample data.  As supplied I couldn't return any records to validate my resultset.  I've updated values in the joining fields to address this:
Sample Data
DECLARE @Page TABLE
    (
        PageId        INT,
        Name        VARCHAR(50),
        CountryId    INT
    )
;

DECLARE @User TABLE
    (
        UserId        INT,
        Name        VARCHAR(50)
    )
;

DECLARE @Clicks TABLE
    (
        ClickId        INT,
        Uin            UNIQUEIDENTIFIER,
        UserId        INT,
        Created        DATETIME,
        PageId        INT
    )
;

DECLARE @Milestone TABLE
    (
        MiestoneId        INT,
        MilestoneTypeId    INT,
        CampaignId        INT,
        UserId            INT,
        Created            DATETIME,
        PageId            INT
    )
;

INSERT INTO @Page
    (
        PageId,
        Name,
        CountryId
    )
VALUES
    (3095, 'Registration', 77),
    (3110, 'Customer registration', 77),
    (5174, 'View user details', 77)
;

INSERT INTO @User
    (
        UserId,
        Name
    )
VALUES
    (4301, 'Dan'),
    (2, 'Mike'),
    (3, 'John')
;

INSERT INTO @Clicks
    (
        ClickId,
        Uin,
        UserId,
        Created,
        PageId
    )
VALUES
    (1296600, 'B420D0F4-20BE-49BE-AAC9-47DD858B68DD', 4301, '2016-01-14 12:08:03:723', 3095),
    (1296600, 'B420D0F4-20BE-49BE-AAC9-47DD858B68DD', 4301, '2016-01-14 12:08:03:723', 3095),
    (1296599, 'DA5877BA-8FF5-4671-8DF9-CCCBF1555BA1', 4301, '2016-01-14 12:07:46:930', 3110),
    (1296598, 'C6790CB9-6DA6-4A8B-84AA-7D2D3A4B5787', 4301, '2016-01-14 12:07:43:563', 5174)
;

INSERT INTO @Milestone
    (
        MiestoneId,
        MilestoneTypeId,
        CampaignId,
        UserId,
        Created,
        PageId
    )
VALUES
    (1, 1, 1001, 4301, '2014-01-06 13:18:04:487', 3095),
    (2, 1, 1001, 4301, '2014-01-06 13:41:01:257', 3110),
    (3, 3, 1001, 4301, '2014-01-07 09:52:29:373', 5174)
;

As you spotted in your original query, you cannot directly join Milestone to Click, as each table has a different grain.  In my query I've used CTEs to return the totals from each table.  The main body of my query joins the results.
Example
DECLARE @StartDate  date = '2013-01-01';
DECLARE @EndDate    date = '2016-01-15';
DECLARE @UserId     int = 4301;
DECLARE @CountryId  int = 77;

WITH Click AS
    (
        SELECT
            UserId,
            PageId,
            COUNT(DISTINCT Uin)       AS [Distinct Clicks],
            COUNT(ClickId)            AS [Total Clicks]
        FROM
            @Clicks
        WHERE
            UserId = @UserId
            AND Created BETWEEN @StartDate AND @EndDate
        GROUP BY
            UserId,
            PageId
    ),
    Milestone AS
    (
        SELECT
            UserId,
            PageId,
            SUM(CASE WHEN MileStoneTypeId = 1 THEN 1 ELSE 0 END) AS [Successful Landings],
            SUM(CASE WHEN MileStoneTypeId = 2 THEN 1 ELSE 0 END) AS [Failed Landings],
            SUM(CASE WHEN MileStoneTypeId = 3 THEN 1 ELSE 0 END) AS [Unfinished Landings]
        FROM
            @Milestone
        WHERE
            UserId = @UserId
            AND Created BETWEEN @StartDate AND @EndDate
        GROUP BY
            UserId,
            PageId
    )
SELECT
    p.PageId,
    p.Name,
    c.[Distinct Clicks],
    c.[Total Clicks],
    ms.[Successful Landings],
    ms.[Failed Landings],
    ms.[Unfinished Landings]
FROM
    @Page AS p
        INNER JOIN Click AS c            ON  c.PageId    = p.PageId
        INNER JOIN Milestone AS ms       ON  ms.PageId    = c.PageId
                                         AND ms.UserId    = c.UserId
WHERE
    p.CountryId = @CountryId
;

A: It is slow because you making your "click" selects two times and for each row in your query.
Try to join it as you did with Milestones table and add group by user clause.
upd.
please, can you provide us tables strucure and data like in next example?
declare @Page as table (
  PageId int,
  etc
)
insert into @page (PageId, etc) values (3095, etc)

A: don't use count(distinct), it will sort then count, the sort really cost you a lot of time.
 you can just distinct in your table first then count
like this:
select count(1) from (select distinct column from table);

and if you want to check what cost you the most you can use the mode below
     set showplan_all on

to check the explan  for your query
or you can just click the Display Estimated Execution Plan at the Microsoft SQL Server Management Studio
hope this could help you :)

A: You should turn the "clicks" into functions and call those functions through the query. Using "clicks" as subquerys would work slowly because it will run a lot of times for each row.

redpajama_set_name: RedPajamaStackExchange


Screen Art recently printed and installed these 4 - 16' x 8' wall murals for graphic designer Wendy Daulkin at the Royal Ontario Museum. These wall murals are hiding construction in the Currelly Gallery and will soon be soon removed to reveal a major renovation of the space.
Screen Art provided these Pop Up Banners for publishing giant Wall2Wall Media. These compact, attractive and economical displays install in seconds and give a professional look to booths at Trade Shows or even to Office and Retail Settings.


The original and flagship of Mayfair's crayon-rails line allows players, using washable crayons, to draw their train routes over a map of North America. Players start with an initial sum of money which they use to build short lengths of track during their first couple of turns. For the rest of the game, players operate their trains over the track network drawn on the board to pick up and deliver loads to various cities, and then have the opportunity to add to their track network or improve their train. The game uses demand cards which list three demands, each of a commodity to be delivered to a specified city for a given payoff. Each player has three demand cards to provide opportunities for income.


The Italian colonies, with the partial exception of Libya, played only a secondary role in the Great War. By virtue of not sharing borders with any German colonial territories, Italian overseas possessions were spared the conflict between the European powers in which other African countries became involved. Nonetheless, the First World War did have an impact upon the internal situation in the Italian colonial territories: while in Libya there erupted an anti-colonial revolt backed by the Central Powers, Eritrea and Somalia were affected by operations planned by the pan-Islamic network, which in the Horn of Africa was mainly sustained by Ethiopia. Finally, in the Dodecanese the war exacerbated the inter-ethnic divisions pitting the local Greek population against the Italian occupiers.
Although for the majority of the European imperialist powers the First World War led to greater integration between metropolis and colonies, in the case of Italy it caused the kingdom and its overseas territories to draw apart. The reasons for this were various: the fact of native troops not actually being involved in military operations on the European front; the impoverished state of the economies of Libya, Eritrea, Somalia and the Dodecanese, none of which made significant contributions to the industrial war effort of the metropolis; the inability of the Italian ruling class to grasp the global scope of the conflict.
Finally, what really accounts for the marginal role of the Italian colonies (with the exception of Libya) in the Great War was the fact of their not possessing any particular strategic value, since none of them bordered on territories ruled by countries belonging to the Entente. The decision to align with France and England (April 1915) eliminated any risk of Italian overseas territories being militarily contested in a conflict between Italy and the powers of the Entente. The Italian colonies would have played a wholly different role if Rome had sided with the Central Powers. In that circumstance Libya, Eritrea and Somalia would have served a crucial function as bases for attacking Anglo-French possessions in the North and in the Horn of Africa.
At the outbreak of the Great War in Europe, in 1914, Italy was tied diplomatically to the Central Powers by virtue of the Triple Alliance, which from 1882 had served to safeguard the interests of the young kingdom in the continent. While the outcomes of its expansion into Africa were guaranteed by the subaltern character that Rome's colonial (and Mediterranean) policy maintained with respect to British orientations.
The competition ignited at the beginning of the 20th century between Berlin and London rendered the Italian position more awkward, caught as the kingdom was between the two rival Empires. It became apparent that this was indeed the crux of Italian foreign policy at the Conference of Algeciras (1905), where the safeguarding of Rome's Mediterranean interests came into conflict with loyalty to the Triple Alliance. The outbreak of the Great War brought up the same dilemmas, but this time obviously in more dramatic terms. The decision to opt for neutrality reflected the state of indecision in the country at large, but also the objective difficulty of harmonising the various diplomatic requirements of the young Italian Kingdom.
Looking at things from the perspective of the overseas territories, however, the international situation as regards the conflict did in fact seem clearer: the Italian colonies were surrounded by Anglo-French possessions; furthermore, hegemony over the Mediterranean, exercised through control over the straits of Suez, was in London's hands. Then again, the fact of overseas Italy and Germany being placed in two opposed camps was confirmed by the militant fashion in which Berlin, from 1914 onwards, had fomented pan-Islamic propaganda in Libya, Somalia and Eritrea. The renewal of the Triple Alliance in 1912 was not sufficient reason to hope that Libya would escape the German vice.
Together with the Italo-Austrian front, the Mediterranean area represented the main field of action for the Italian armed forces during the Great War. In particular, Libya, from November 1914 onwards, became the southern front in the Great War fought by Italy.
The outbreak of the rebellion in Fezzan (in the south) – which was due to the Sanussi faction - inaugurated a four year period of conflict that devastated Libya. From Fezzan the revolt spread rapidly to the rest of the country until it involved the whole of Tripolitania and Cyrenaica. Sweeping all before it, the rebellion convinced the government in Rome to opt for the most drastic solution, namely, to withdraw all garrisons from the interior. In the space of a few months Italian possessions in Libya had been reduced to a handful of coastal cities, the rest of the territory having fallen into the hands of the rebels.
The Italian withdrawal to the coast and the abandonment of a large part of the colonial territory did not signify a cessation of hostilities. On the contrary, the conflict against the mujahidin dragged on until 1919, Italy having to withstand pressure from the rebels attacking the few cities still in Italian hands, in the hope of winning them back again. Lacking a sufficient number of battalions and aware that the military chiefs in Rome had decided to concentrate their efforts on the European front, the governments in Tripoli and Benghazi simply sought to repel the rebel onslaught. In short, the Libyan war of 1914-1919 was one long siege.
The conflict unleashed through the resistance in Cyrenaica and Tripolitania should not be seen solely in the context of the colonial war but ought to be inserted into a wider frame, namely, the Ottoman Pan-Islamic project and the German attempt to rid the Mediterranean of the English, French and Italian presence. The convergence of German, Turkish and Libyan objectives became apparent in the Autumn of 1915 in Cyrenaica. After having driven the Italian troops towards the coast, the leader of the Sanussi, Ahmad al-Sharif (1867-1933), organised his forces in an attack on Egypt, then an English protectorate. The invasion plan was not an isolated project but was a strategy coordinated with the government in Berlin, its intention being to draw away a quota of English troops from the European theatre of war. But the presiding genius behind the operation was the Ottoman minister of war, Ismail Enver Pasha (1881-1922), who sought to regain a foothold in Africa and to reclaim two territories that had once belonged to the Sublime Porte, namely, Egypt and Libya. In February 1915, the Turkish minister sent his brother Nuri Killigil Bey (1889-1949) to Cyrenaica, his allotted task being to organise a pincer movement whereby Egypt would be invaded from the east (Sinai), from the south (Sudan) and from the west (Cyrenaica).
The Grand Sanussi, who throughout 1915 had been involved in the conflict against the French in Wadai and Tibesti and against the Italians in Cyrenaica, on 12 November launched an attack upon the Anglo-Egyptian troops. The Sanussi forces, led by Nuri Bey and resupplied by German submarines, succeeded in occupying Sollum, and then advancing towards Sidi al-Barrani. Nonetheless, the triumphant march of Nuri and of the Grand Sanussi was halted on 25 December that same year by the South African troops commanded by General John Maxwell (1859-1929), come to relieve the Anglo-Egyptian forces.
The crushing defeat that followed would cost Ahmad al-Sharif his role as leader of the Sanussi brotherhood. The consequence of this new orientation was the Acroma Pact (April 1917). The accords recognised the authority of the Sanussi faction in Cyrenaica and thus enabled Italy to scale down its war effort in eastern Libya, in order to concentrate upon the western region, which had become the centre of the anti-colonial revolt.
The attempt to attack Egypt from the west having failed, the Turko-German officers chose to concentrate their forces in Tripolitania, in an attempt to strike Italy, that is to say, the weakest of the three allies then in control of the North African coast. From 1914 onwards the Ottomans had worked to promote the return of the rebels, who after 1912 (the peace of Lausanne) had left Libya, having found a welcome within the Ottoman Empire. Those involved were exponents of the Libyan jihad who represented the most intransigent fringes of the resistance movement, preferring as they did exile to submission. Amongst their number were the Berber Suleiman al-Baruni (1872-1940) and the Arab leader Mohammed Sof (1857-1930).. The power vacuum brought about by the withdrawal of the Italian garrisons resulted in the installation of governments led by the leaders of the resistance: in the Jebel (the plateau) the government of the Arab leader Sof alternated with that of the Berber al-Baruni, which mounted various expeditions against the few enclaves still controlled by the Italians. Nonetheless, their inability to capture Tripoli (and thereby to deal a mortal blow to the Italian colonial regime) and the domestic strife between Arabs and Berbers rendered the establishment of a stable government impossible. Within a short space of time the Jebel sank into a condition of misery and political anarchy.
While the zone of the plateau was grievously stricken by competition between the different political tendencies, in east Tripolitania the leader of Misurata, Ramadan Shitewy (1881-1920) managed to ensure stability and unity of action among the mujahidin. From 1916 Misurata became the most important centre of Libyan resistance, extending its hegemony over Fezzan and the central-eastern region of Warfalla. Shitewy reached the apogee of his power in November 1918 when under his aegis the Tripolitanian republic was constituted, with the support of the majority of the country's notables.
For Italy the year 1918 ended in a victory in Europe and crushing defeat in Libya. Once hostilities on the European front had ended, Rome could again concentrate on the colonial question, which had been removed from the country's political agenda in 1914. Hastily abandoned between 1914 and 1915, the appearance of Libya had completely altered at the end of 1918. Having escaped from Italian control, its territories were ruled by local leaders, Shitewy in the west and Idris Sanussi (1889-1983) in the east.
At the outbreak of the Great War in 1914 the Dodecanese was not strictly speaking an Italian colony, but rather a colonial possession. In fact, in the course of the Italo-Turkish War, the archipelago was occupied by Italian troops with a view to inducing Constantinople to surrender. According to the treaty signed at Lausanne by the Ottoman Empire and Italy, the Aegean islands would only temporarily remain in Italian hands.
Italy's declaration of war against the Ottoman Empire on 20 August 1915 ratified the expiration of the peace of Lausanne and transformed the archipelago facing the Anatolian coast into a bridgehead for potential attacks on the Ottoman enemy. As things turned out, in the course of the war the islands were not involved in any hostilities. Nonetheless, notwithstanding their not being involved in the conflict, the Dodecanese were not wholly unaffected by the events of the war: the Italian occupiers had to confront the local Greek population, given the open support that this community, with the backing of the Orthodox Church, gave to Greece, which positioned itself as a rival to Italy in the eastern Mediterranean. The Greek community's orientation was counterbalanced by the favourable disposition of the Muslims and the Jews, who, fearing pan-Hellenic impulses, already in evidence in other regions, maintained a benevolent stance towards the Italian presence. If in the course of the world war the role of the Dodecanese was, all in all, marginal, it nonetheless acquired a strategic importance in the following months, serving as a logistics base for the Italian expedition to Anatolia.
The conflict that erupted in 1914 did not directly involve the Italian colonies of east Africa; nonethless, the domestic politics of Eritrea and Somalia were affected by international tensions. The fact that in summer 1914, at the outbreak of hostilities, Italy was in the opposite camp to England and France aroused deep apprehension in Asmara and Mogadishu (the capitals of Eritrea and Somalia respectively). Once it had become clear that Italy would align itself with the Entente, the fear of a possible Anglo-French attack dissipated, but the risk of an Abyssinian offensive appeared ever more concrete. In December 1913, upon the death of the Menelik II, Negus of Ethiopia (1844-1913), the young Lij Iyasu (1895-1935) was appointed as regent. The latter then decided to detach Ethiopia from the sphere of influence of France and of England, whose hegemony extended to a large part of the Horn of Africa. Addis Ababa drew closer to Germany and to the Ottoman Empire, which were intent upon undermining British power, their aim being to subsume Eritrea, Somalia and Kenya within the Abyssinian Empire. Lij Iyasu also introduced some important changes in religious policy, scaling down the role of the orthodox Coptic church, to the advantage of Islam (culminating in his own conversion, in 1916). The battle of Yiasu thus assumed a religious value, being framed by the pan-Islamic policy of which Mehmet V, Sultan of the Turks (1844-1918) had become the spokesman through the issuing of the fatwa of 14 November 1914, which spurred on the Muslims to jihad.
A powerful pole of anti-colonial opposition had been constituted in the Horn of Africa, to which the leader of the Somalian resistance Mohammed Abdullah Hassan (1856-1920) also rallied. The struggle spearheaded by Hassan, leader of the religious brotherhood of the Salihiya, against the English and Italian occupation of Somalia dated back to the beginning of the 20th century. Once Hassan had succeeded in stemming English advances into the country, he forced the Italians to sign a treaty recognising his authority over a part of the northern territories (1905). The fragile peace was breached in 1911 by Hassan's dervishes, who attacked the zone of Migiurtina, but were then driven northwards, into the territories of British Somalia. The world war coincided with a recommencement of the conflict between the Somalian resistance and the colonial troops, English and Italian.
Hassan tried to involve the Sultan in his struggle, requesting that the Ottoman troops stationed in the Arabian peninsula come to his aid in Somalia. He also endeavoured to draw up a matrimonial alliance with Lij Yiasu. However, the deposing of this latter in September 1916 altered the balance of power yet again, with every agreement thereby being annulled.
Yiasu's fall put an end to any hopes of forming a common anti-colonial front cemented by a shared Islamic faith. Besides, the revolt that broke out in 1915 in the Hejaz (Saudi Arabia) against Ottoman rule and the failed attempt by Enver Pasha to occupy the Suez canal had dealt a fatal blow to the pan-Islamic movement directed by the Sublime Porte.
The scant support that Hassan received from the Turco-Germans and the deposing of Lij Yiasu meant that the former was unable to exploit to his own advantage the contemporary engagement of Anglo-Italian troops on the European front and in north Africa. At the end of the global conflict, the situation in Somalia seemed not to favour the Somali resistance, who had not been able to exploit the pan-Islamic wave (which in Libya had caused the Italian colonial regime to founder). The social and economic context had been fatally affected by the limited circulation of currency and by the anarchy that was unleashed in the central zones, causing the deaths of one third of the population of British Somalia.
The end of the campaign on the European front inaugurated a period of intense military engagement for the Mullah's troops, who were intent upon repelling the British attack mounted from October 1919 onwards: the colonial government had decided to deal once and for all with the rebellion of the dervishes. The brief campaign led in 1920 to the defeat of Mohammed Abdalla Hassan and to his death that same year.
As events in Somalia had made plain, the real danger for the colonial governments in the Horn of Africa arose from the pan-Islamic network, backed as it was by Berlin and Constantinople, and involving Ethiopia also. The chances of the revolt unleashed by Hassan proving successful depended upon his finding a point of insertion within this transnational movement.
The spectre of pan-Islamic contagion loomed in Eritrea in February 1915, when the German explorer Leo Frobenius (1873-1938), along with four of his fellow countrymen, landed at Massawa. Officially Frobenius had come to Eritrea for scientific reasons; in reality his intention was to push into the interior and exhort the local populations to rise up against the governments of Asmara and Khartoum. The small band was then supposed to have made its way to Ethiopia. Nonetheless, the real aims of the German mission were covered up by the Italian authorities and the secret agents were hurried out of the colony.
Eritrea, if we set these clumsy propagandistic efforts aside, was not directly involved in military operations. All the same, the instability of the Libyan context had a significant impact upon the little colony in the Horn of Africa, forced as it was to send thousands of men to try to stem (in vain) the revolt that had broken out in Libya. The enrolment of native soldiers had the effect of withdrawing manpower, creating an imbalance in the local labour market, due to the resulting rise in wages. The involvement of the little colony facing the Red Sea was not limited, however, to the sending of battalions into Libya (but not into the European theatre of war). Indeed, Eritrea specialised in the production of certain products that were necessary to the Italian army: potash, cattle hides and tinned meat. Involvement in production gave rise to a rapid impoverishment of the colony, in particular the decimation of its livestock. It therefore became necessary to import raw materials from abroad, notwithstanding the general context of the war and the partial commercial blockade imposed by the British in the Red Sea. The strict limitations imposed by London on Italian shipments led to the open expression of disagreements between the two allies, linked to the reinforcing of the British presence on the Arabian peninsula.
Relations between Rome and Paris in the Horn of Africa would prove to be still more problematic. For the Italian government viewed the French presence in Djibouti as a grave threat, especially in relation to the trade in arms that the French conducted with Ethiopia. This was without taking into account the fact that in May 1918 the Djibouti government had banned all exports to Massawa: a measure that was greatly to the detriment of Eritrea, since in the war years it had indeed intensified its commercial dealings with Djibouti.
In the military context of the period 1914-1918 Eritrea had functioned as a territory dedicated to the production of goods useful to the war effort, along with the sending of thousands of askari into Libya. The risks as regards the security of the colony arose from Ethiopia, from Turco-German propaganda, but also, as we have seen, from the conflicting interests of the three allies, Italy, France and Great Britain.
As regards the colonial territories, the Italian balance sheet was somewhat unsatisfactory: Libya had been lost, Eritrea had been impoverished through the exploitation of its (scarce) resources, in Somalia the socio-economic context was in a state of collapse, and finally the Dodecanese was riven by tensions between its various ethnic communities. Rome's ambitions, among them the capture of Djibouti and the recognition of its influence over Ethiopia, had been brusquely rejected by Paris and London, thereby bringing to light the deep disagreements between the three allies and Italy's own diplomatic and political weakness.
↑ Labanca, Nicola: Oltremare. Storia dell'espansione coloniale italiana, Bologna 2002, p. 125.
↑ Perticone, Giacomo: La politica estera italiana dal 1861 al 1914, Rome 1961, pp. 8 ff.
↑ Decleva, Enrico: L'Italia e la politica internazionale dal 1870 al 1914. L'ultima fra le grandi potenze, Milan 1974, p. 123 ff.
↑ Del Boca, Angelo: Gli italiani in Libia. Tripoli bel suol d'amore (1860-1922), Rome 1986, pp. 261 ff.
↑ Labanca, Nicola: La guerra italiana per la Libia (1911-1931), Bologna 2012, pp. 128. 60,000 soldiers did however still remain in Libya.
↑ McMeekin, Sean: The Berlin-Baghdad Express. The Ottoman Empire and Germany's bid for world power (1898-1918), London 2011.
↑ The Sudanese revolt was led by the Sultan ʻAli Dinar.
↑ Simon, Rachel: Libya between ottomanism and nationalism. The Ottoman involvement in Libya during the war with Italy (1911-1919), Berlin 1987.
↑ Evans-Pritchard, E.E.: The Sanusi of Cyrenaica, Oxford 1949, pp. 104 ff.
↑ al-Baruni, S.: Safahat khalida min jihad, vol I and II, in: al-Baruni, Zaima (ed.): Matbʻa al-istiqlal al-kubra, Cairo 1964; Hawidi, M.A.: Sceikh Mohammed Sof al-Mahmudi, Tripoli 2002.
↑ Berhe, Simona: Notabili libici e funzionari italiani: l'amministrazione coloniale in Tripolitania (1912-1919), Soveria Mannelli 2015, pp. 217 ff.
↑ Fushayka, M.M.: Ramadan al-Suwaihli. Al-batl al-libi al-shahid bi-kifahihi lil-tiliyan, Tripoli 1974.
↑ Pasqualini, M.G.: L'esercito italiano nel Dodecaneso (1912-1943). Speranze e realtà, Rome 2005, pp. 87 ff.
↑ Doumanis, Nicholas: Una faccia, una razza. Le colonie italiane nell'Egeo, Bologna 2003, pp. 60 ff.
↑ Del Boca, Angelo: Gli italiani in Africa orientale. Dall'unità alla marcia su Roma, Milan 2001, pp. 839 ff; Marcus, Harold: The End of the Reign of Menelik, in: The Journal of African History 11/4 (1970).
↑ Jardine, Douglas: The mad mullah of Somaliland, London 1923.
↑ Del Boca, Gli italiani in Africa orientale 2001, pp. 790 ff.
↑ Hess, Robert L.: Italian colonialism in Somalia, Chicago et al. 1966, p. 146.
↑ Shibarw, ʻA.: Thawra al-ʻarab dd al-atrak, Beirut 1993.
↑ Biocca, Dario: La missione Frobenius in Eritrea, in: Nuova Storia Contemporanea 14/4 (2010), pp. 17-44.
↑ Ministero delle colonie. Direzione generale degli affari politici e dei servizi relativi alle truppe coloniali, Affrica italiana. Programma massimo e programma minimo di sistemazione dei possedimenti italiani nell 'Affrica orientale e settentrionale, Rome, Tipografia del Senato, 1919.
↑ Ministero delle colonie, Problemi del dopo guerra. Relazione del Governo dell'Eritrea, Rome, Tipografia nazionale Bertero, 1918 pp. 17-18.
↑ Clodomiro, Vanni (ed.): Il diario di Gaspare Colosimo ministro delle Colonie (1916-1919), Rome 2012, p. 477; Martini, Ferdinando: Diario (1914-1918), edited by G. De Rosa, Milan 1966, p. 439.
al-Baruni, S., al-Baruni, Zaima (ed.): Safahat khalida min jihad (Glorious pages from the jihad), Cairo 1964: Matbʻa al-istiqlal al-kubra.
Berhe, Simona: Notabili libici e funzionari italiani. L'amministrazione coloniale in Tripolitania (1912-1919), Soveria Mannelli 2015: Rubbettino.
Calchi Novati, Giampaolo: Fra Mediterraneo e Mar Rosso. Momenti di politica italiana in Africa attraverso il colonialismo, Rome 1992: Istituto italo-africano.
Del Boca, Angelo: La disfatta di Gasr bu Hàdi. 1915, il colonello Miani e il più grande disastro dell'Italia coloniale, Milan 2004: Mondadori.
Del Boca, Angelo: Gli Italiani in Libia. Tripoli bel suol d'amore (1860-1922), Bari 1986: Laterza.
Del Boca, Angelo: Gli italiani in Africa orientale. Dall'unità alla marcia su Roma, Milan 2001: Mondadori.
Evans-Pritchard, Edward Evan: Colonialismo e resistenza religiosa nell'Africa settentrionale. I Senussi di Cirenaica, Catania 1979: Edizioni del prisma.
Hess, Robert L.: Italy and Africa. Colonial ambitions in the First World War, in: The Journal of African History 4/1, 1963, pp. 105-126.
Hess, Robert L.: Italian colonialism in Somalia, Chicago; London 1966: University of Chicago Press.
Jardine, Douglas: The mad mullah of Somaliland, London 1923: Jenkins.
Labanca, Nicola: La guerra italiana per la Libia. 1911-1931, Bologna 2012: Il Mulino.
Labanca, Nicola: Oltremare. Storia dell'espansione coloniale italiana, Bologna 2002: Il Mulino.
Leone, Enrico de: La Colonizzazione dell'Africa del Nord, volume 2, Padova 1957: CEDAM.
Martini, Ferdinando, Rosa, Gabriele de (ed.): Diario, 1914-1918, Milan 1966: Mondadori.
Ministero delle colonie: Problemi del dopo guerra. Relazione del Governo dell'Eritrea, Rome 1918: Tipografia nazionale Bertero.
Ministero delle colonie / Direzione generale degli affari politici e dei servizi relativi alle truppe coloniali: Affrica italiana. Programma massimo e programma minimo di sistemazione dei possedimenti italiani nell'affrica orientale e settentrionale, Rome 1919: Tipografia del Senato.
Pasqualini, Maria Gabriella: L'esercito italiano nel Dodecaneso (1912-1943). Speranze e realtà, Rome 2005: Ufficio Storico Stato Maggiore Aeronautica.
Vitale, Massimo Adolfo: L'Italia in Africa. L'opera dell'esercito. Avvenimenti militari e impiego. Africa orientale (1868-1934), volume 1, book 2, part 1, Rome 1962: Istituto poligrafico dello Stato.


text:
Jackie Safier Honored by the Trust for Public Land with the Land for People Award
Prometheus Real Estate Group CEO Jackie Safier has been honored by the Trust for Public Land (TPL) with The Land for People Award. The Land for People Award is The Trust for Public Land's highest honor, presented to those who demonstrate a strong commitment to creating parks and conservation through their partnership with TPL.
Past recipients include: Sally Jewell, then-CEO of REI in Seattle; James Cox Kennedy, Chair, Cox Enterprises in Atlanta; Douglas Durst and Family, Chair, The Durst Organization in New York; Michael Kowalski, CEO, Tiffany & Co., New York; and Robert Farnsworth President & CEO, PlayCore in Chattanooga). Phil Ginsburg was also honored with the Power of Place award, the highest national honor presented to a senior executive of a public agency or nonprofit partner that champions TPL's mission to create parks and protect land for people.
Jackie and the Helen Diller Family Foundation have been a driving force behind the Helen Diller Civic Center Playgrounds renovations, bringing an incredible vision to the iconic space in front of City Hall. On February 14, 2018, the brand new playground will open its gates (and swings, and slides) to San Francisco residents – exactly one year after the official groundbreaking.
The Trust for Public Land's mission is to create parks and protect land for people, ensuring healthy, livable communities for generations to come. The Helen Diller Civic Center Playgrounds will help ensure the #10minwalk dream – the commitment to ensuring that everyone living in a city has a quality park, garden or playground within a 10-minute walk from home.
To learn more about Prometheus, visit http://www.prometheusapartments.com.
About Prometheus Real Estate Group
Prometheus Real Estate Group, Inc. is the largest private owner of multifamily properties in the San Francisco Bay Area, with a growing portfolio of more than 15,000 metropolitan-area apartments in the Bay Area, Seattle and Portland regions. Since its inception in 1965, Prometheus has specialized in the acquisition, development and management of high-quality residential and commercial properties throughout the western United States. Prometheus has a long history of award-winning approaches to development, management and general excellence. Its philosophy is centered on making the apartment experience more fun and interesting while providing a true sense of home. For more information, visit prometheusapartments.com.
Santa Clara Apartments
Mountain View Apartments
Sunnyvale Apartments
Cupertino Apartments
Foster City Apartments
San Mateo Apartments
Walnut Creek Apartments
Emeryville Apartments
Palo Alto Apartments
San Carlos Apartments
Beaverton Apartments
Kirkland Apartments
Bellevue Apartments
Gig Harbor Apartments
Prometheus logo Prometheus logo Flame logo next to the Prometheus trademark
Facebook LinkedIn Instagram Glassdoor
1900 South Norfolk Street, Suite 150
CA Bur. of Real Estate – Broker #01144157
Prometheus specializes in luxury apartment homes in the Bay Area, Portland, and Seattle.
Prometheus logo Flame logo next to the Prometheus trademark
Studio+ 1+ 2+ 3+ Bedrooms
1+ 2+ Bathrooms
Or explore our regions:
SF Bay AreaPortlandSeattle Choose region