text:
import pandas as pd
import pytest
import numpy as np
import tensorflow as tf
from stellargraph import StellarGraph
from stellargraph.layer import (
    GraphSAGE,
    GCN,
    GAT,
    HinSAGE,
    link_classification,
    link_regression,
)
from stellargraph.mapper import (
    GraphSAGENodeGenerator,
    FullBatchNodeGenerator,
    HinSAGENodeGenerator,
    GraphSAGELinkGenerator,
    HinSAGELinkGenerator,
)
from stellargraph.ensemble import Ensemble, BaggingEnsemble

from tensorflow.keras import layers, Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import categorical_crossentropy, binary_crossentropy

# FIXME (#535): Consider using graph fixtures
def example_graph_1(feature_size=None):
    nlist = [1, 2, 3, 4, 5, 6]
    if feature_size is not None:
        features = np.ones((len(nlist), feature_size))
    else:
        features = []

    elist = [(1, 2), (2, 3), (1, 4), (3, 2), (5, 6), (1, 5)]

    return StellarGraph(
        pd.DataFrame(features, index=nlist),
        pd.DataFrame(elist, columns=["source", "target"]),
    )

def create_graphSAGE_model(graph, link_prediction=False):

    if link_prediction:
        # We are going to train on the original graph
        generator = GraphSAGELinkGenerator(graph, batch_size=2, num_samples=[2, 2])
        edge_ids_train = np.array([[1, 2], [2, 3], [1, 3]])
        train_gen = generator.flow(edge_ids_train, np.array([1, 1, 0]))
    else:
        generator = GraphSAGENodeGenerator(graph, batch_size=2, num_samples=[2, 2])
        train_gen = generator.flow([1, 2], np.array([[1, 0], [0, 1]]))

    # if link_prediction:
    #     edge_ids_train = np.array([[1, 2], [2, 3], [1, 3]])
    #     train_gen = generator.flow(edge_ids_train, np.array([1, 1, 0]))
    # else:
    #     train_gen = generator.flow([1, 2], np.array([[1, 0], [0, 1]]))

    base_model = GraphSAGE(
        layer_sizes=[8, 8], generator=generator, bias=True, dropout=0.5
    )

    if link_prediction:
        # Expose input and output sockets of graphsage, for source and destination nodes:
        x_inp, x_out = base_model.in_out_tensors()

        prediction = link_classification(
            output_dim=1, output_act="relu", edge_embedding_method="ip"
        )(x_out)

        keras_model = Model(inputs=x_inp, outputs=prediction)
    else:
        x_inp, x_out = base_model.in_out_tensors()
        prediction = layers.Dense(units=2, activation="softmax")(x_out)

        keras_model = Model(inputs=x_inp, outputs=prediction)

    return base_model, keras_model, generator, train_gen

def create_HinSAGE_model(graph, link_prediction=False):

    if link_prediction:
        generator = HinSAGELinkGenerator(
            graph,
            batch_size=2,
            num_samples=[2, 1],
            head_node_types=["default", "default"],
        )
        edge_ids_train = np.array([[1, 2], [2, 3], [1, 3]])
        train_gen = generator.flow(edge_ids_train, np.array([1, 1, 0]))
    else:
        generator = HinSAGENodeGenerator(
            graph, batch_size=2, num_samples=[2, 2], head_node_type="default"
        )
        train_gen = generator.flow([1, 2], np.array([[1, 0], [0, 1]]))

    base_model = HinSAGE(
        layer_sizes=[8, 8], generator=generator, bias=True, dropout=0.5
    )

    if link_prediction:
        # Define input and output sockets of hinsage:
        x_inp, x_out = base_model.in_out_tensors()

        # Final estimator layer
        prediction = link_regression(edge_embedding_method="ip")(x_out)
    else:
        x_inp, x_out = base_model.in_out_tensors()
        prediction = layers.Dense(units=2, activation="softmax")(x_out)

    keras_model = Model(inputs=x_inp, outputs=prediction)

    return base_model, keras_model, generator, train_gen

def create_GCN_model(graph):

    generator = FullBatchNodeGenerator(graph)
    train_gen = generator.flow([1, 2], np.array([[1, 0], [0, 1]]))

    base_model = GCN(
        layer_sizes=[8, 2],
        generator=generator,
        bias=True,
        dropout=0.5,
        activations=["elu", "softmax"],
    )

    x_inp, x_out = base_model.in_out_tensors()

    keras_model = Model(inputs=x_inp, outputs=x_out)

    return base_model, keras_model, generator, train_gen

def create_GAT_model(graph):

    generator = FullBatchNodeGenerator(graph, sparse=False)
    train_gen = generator.flow([1, 2], np.array([[1, 0], [0, 1]]))

    base_model = GAT(
        layer_sizes=[8, 8, 2],
        generator=generator,
        bias=True,
        in_dropout=0.5,
        attn_dropout=0.5,
        activations=["elu", "elu", "softmax"],
        normalize=None,
    )

    x_inp, x_out = base_model.in_out_tensors()

    keras_model = Model(inputs=x_inp, outputs=x_out)

    return base_model, keras_model, generator, train_gen

#
# Test for class Ensemble instance creation with invalid parameters given.
#
def test_ensemble_init_parameters():
    tf.keras.backend.clear_session()

    graph = example_graph_1(feature_size=10)

    base_model, keras_model, generator, train_gen = create_graphSAGE_model(graph)

    # base_model, keras_model, generator, train_gen
    gnn_models = [
        create_graphSAGE_model(graph),
        create_HinSAGE_model(graph),
        create_graphSAGE_model(graph, link_prediction=True),
        create_HinSAGE_model(graph, link_prediction=True),
        create_GCN_model(graph),
        create_GAT_model(graph),
    ]

    for gnn_model in gnn_models:
        base_model = gnn_model[0]
        keras_model = gnn_model[1]

        # Test mixed types
        with pytest.raises(ValueError):
            Ensemble(base_model, n_estimators=3, n_predictions=3)

        with pytest.raises(ValueError):
            Ensemble(keras_model, n_estimators=1, n_predictions=0)

        with pytest.raises(ValueError):
            Ensemble(keras_model, n_estimators=1, n_predictions=-3)

        with pytest.raises(ValueError):
            Ensemble(keras_model, n_estimators=1, n_predictions=1.7)

        with pytest.raises(ValueError):
            Ensemble(keras_model, n_estimators=0, n_predictions=11)

        with pytest.raises(ValueError):
            Ensemble(keras_model, n_estimators=-8, n_predictions=11)

        with pytest.raises(ValueError):
            Ensemble(keras_model, n_estimators=2.5, n_predictions=11)

        ens = Ensemble(keras_model, n_estimators=7, n_predictions=10)

        assert len(ens.models) == 7
        assert ens.n_estimators == 7
        assert ens.n_predictions == 10

        #
        # Repeat for BaggingEnsemble
        # Test mixed types
        with pytest.raises(ValueError):
            BaggingEnsemble(base_model, n_estimators=3, n_predictions=3)

        with pytest.raises(ValueError):
            BaggingEnsemble(keras_model, n_estimators=1, n_predictions=0)

        with pytest.raises(ValueError):
            BaggingEnsemble(keras_model, n_estimators=1, n_predictions=-3)

        with pytest.raises(ValueError):
            BaggingEnsemble(keras_model, n_estimators=1, n_predictions=1.7)

        with pytest.raises(ValueError):
            BaggingEnsemble(keras_model, n_estimators=0, n_predictions=11)

        with pytest.raises(ValueError):
            BaggingEnsemble(keras_model, n_estimators=-8, n_predictions=11)

        with pytest.raises(ValueError):
            BaggingEnsemble(keras_model, n_estimators=2.5, n_predictions=11)

        ens = BaggingEnsemble(keras_model, n_estimators=7, n_predictions=10)

        assert len(ens.models) == 7
        assert ens.n_estimators == 7
        assert ens.n_predictions == 10

def test_compile():
    tf.keras.backend.clear_session()

    graph = example_graph_1(feature_size=10)

    # base_model, keras_model, generator, train_gen
    gnn_models = [
        create_graphSAGE_model(graph),
        create_HinSAGE_model(graph),
        create_graphSAGE_model(graph, link_prediction=True),
        create_HinSAGE_model(graph, link_prediction=True),
        create_GCN_model(graph),
        create_GAT_model(graph),
    ]

    for gnn_model in gnn_models:
        keras_model = gnn_model[1]
        ens = Ensemble(keras_model, n_estimators=2, n_predictions=5)

        with pytest.raises(ValueError):  # must specify the optimizer to use
            ens.compile(
                optimizer=None, loss=categorical_crossentropy, weighted_metrics=["acc"]
            )

        # Repeat for BaggingEnsemble
        ens = BaggingEnsemble(keras_model, n_estimators=2, n_predictions=5)

        with pytest.raises(ValueError):  # must specify the optimizer to use
            ens.compile(
                optimizer=None, loss=categorical_crossentropy, weighted_metrics=["acc"]
            )

def test_Ensemble_fit():
    tf.keras.backend.clear_session()

    graph = example_graph_1(feature_size=10)

    # base_model, keras_model, generator, train_gen
    gnn_models = [
        create_graphSAGE_model(graph),
        create_HinSAGE_model(graph),
        create_GCN_model(graph),
        create_GAT_model(graph),
    ]

    for gnn_model in gnn_models:
        keras_model = gnn_model[1]
        generator = gnn_model[2]
        train_gen = gnn_model[3]

        ens = Ensemble(keras_model, n_estimators=2, n_predictions=1)

        ens.compile(
            optimizer=Adam(), loss=categorical_crossentropy, weighted_metrics=["acc"]
        )

        ens.fit(train_gen, epochs=1, verbose=0, shuffle=False)

        with pytest.raises(ValueError):
            ens.fit(
                generator=generator,  # wrong type
                epochs=10,
                validation_data=train_gen,
                verbose=0,
                shuffle=False,
            )

def test_BaggingEnsemble_fit():
    tf.keras.backend.clear_session()

    train_data = np.array([1, 2])
    train_targets = np.array([[1, 0], [0, 1]])

    graph = example_graph_1(feature_size=10)

    # base_model, keras_model, generator, train_gen
    gnn_models = [
        create_graphSAGE_model(graph),
        create_HinSAGE_model(graph),
        create_GCN_model(graph),
        create_GAT_model(graph),
    ]

    for gnn_model in gnn_models:
        keras_model = gnn_model[1]
        generator = gnn_model[2]
        train_gen = gnn_model[3]

        ens = BaggingEnsemble(keras_model, n_estimators=2, n_predictions=1)

        ens.compile(
            optimizer=Adam(), loss=categorical_crossentropy, weighted_metrics=["acc"]
        )

        ens.fit(
            generator=generator,
            train_data=train_data,
            train_targets=train_targets,
            epochs=1,
            validation_data=train_gen,
            verbose=0,
            shuffle=False,
        )

        # This is a BaggingEnsemble so the generator in the below call is of the wrong type.
        with pytest.raises(ValueError):
            ens.fit(
                train_gen,
                train_data=train_data,
                train_targets=train_targets,
                epochs=10,
                verbose=0,
                shuffle=False,
            )

        with pytest.raises(ValueError):
            ens.fit(
                generator=generator,
                train_data=train_data,
                train_targets=None,  # Should not be None
                epochs=10,
                validation_data=train_gen,
                verbose=0,
                shuffle=False,
            )

        with pytest.raises(ValueError):
            ens.fit(
                generator=generator,
                train_data=None,
                train_targets=None,
                epochs=10,
                validation_data=None,
                verbose=0,
                shuffle=False,
            )

        with pytest.raises(ValueError):
            ens.fit(
                generator=generator,
                train_data=train_data,
                train_targets=train_targets,
                epochs=10,
                validation_data=None,
                verbose=0,
                shuffle=False,
                bag_size=-1,  # should be positive integer smaller than or equal to len(train_data) or None
            )

        with pytest.raises(ValueError):
            ens.fit(
                generator=generator,
                train_data=train_data,
                train_targets=train_targets,
                epochs=10,
                validation_data=None,
                verbose=0,
                shuffle=False,
                bag_size=10,  # larger than the number of training points
            )

def test_evaluate():
    tf.keras.backend.clear_session()

    test_data = np.array([3, 4, 5])
    test_targets = np.array([[1, 0], [0, 1], [0, 1]])

    graph = example_graph_1(feature_size=5)

    # base_model, keras_model, generator, train_gen
    gnn_models = [
        create_graphSAGE_model(graph),
        create_HinSAGE_model(graph),
        create_GCN_model(graph),
        create_GAT_model(graph),
    ]

    for gnn_model in gnn_models:
        keras_model = gnn_model[1]
        generator = gnn_model[2]

        ens = Ensemble(keras_model, n_estimators=2, n_predictions=1)

        ens.compile(
            optimizer=Adam(), loss=categorical_crossentropy, weighted_metrics=["acc"]
        )

        # Check that passing invalid parameters is handled correctly. We will not check error handling for those
        # parameters that Keras will be responsible for.
        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator, test_data=test_data, test_targets=test_targets
            )

        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator,
                test_data=test_data,
                test_targets=None,  # must give test_targets
            )

        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator.flow(test_data, test_targets),
                test_data=test_data,
                test_targets=test_targets,
            )

        # We won't train the model instead use the initial random weights to test
        # the evaluate method.
        test_metrics_mean, test_metrics_std = ens.evaluate(
            generator.flow(test_data, test_targets)
        )

        assert len(test_metrics_mean) == len(test_metrics_std)
        assert len(test_metrics_mean.shape) == 1
        assert len(test_metrics_std.shape) == 1

        #
        # Repeat for BaggingEnsemble

        ens = BaggingEnsemble(keras_model, n_estimators=2, n_predictions=1)

        ens.compile(
            optimizer=Adam(), loss=categorical_crossentropy, weighted_metrics=["acc"]
        )

        # Check that passing invalid parameters is handled correctly. We will not check error handling for those
        # parameters that Keras will be responsible for.
        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator, test_data=test_data, test_targets=test_targets
            )

        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator,
                test_data=test_data,
                test_targets=None,  # must give test_targets
            )

        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator.flow(test_data, test_targets),
                test_data=test_data,
                test_targets=test_targets,
            )

        # We won't train the model instead use the initial random weights to test
        # the evaluate method.
        test_metrics_mean, test_metrics_std = ens.evaluate(
            generator.flow(test_data, test_targets)
        )

        assert len(test_metrics_mean) == len(test_metrics_std)
        assert len(test_metrics_mean.shape) == 1
        assert len(test_metrics_std.shape) == 1

def test_predict():

    tf.keras.backend.clear_session()

    # test_data = np.array([[0, 0], [1, 1], [0.8, 0.8]])
    test_data = np.array([4, 5, 6])
    test_targets = np.array([[1, 0], [0, 1], [0, 1]])

    graph = example_graph_1(feature_size=2)

    # base_model, keras_model, generator, train_gen
    gnn_models = [
        create_graphSAGE_model(graph),
        create_HinSAGE_model(graph),
        create_GCN_model(graph),
        create_GAT_model(graph),
    ]

    for i, gnn_model in enumerate(gnn_models):
        keras_model = gnn_model[1]
        generator = gnn_model[2]

        ens = Ensemble(keras_model, n_estimators=2, n_predictions=2)

        ens.compile(
            optimizer=Adam(), loss=categorical_crossentropy, weighted_metrics=["acc"]
        )

        test_gen = generator.flow(test_data)
        # Check that passing invalid parameters is handled correctly. We will not check error handling for those
        # parameters that Keras will be responsible for.
        with pytest.raises(ValueError):
            ens.predict(generator=test_gen, predict_data=test_data)

        # We won't train the model instead use the initial random weights to test
        # the evaluate method.
        test_predictions = ens.predict(test_gen, summarise=True)

        print("test_predictions shape {}".format(test_predictions.shape))
        if i > 1:
            # GAT and GCN are full batch so the batch dimension is 1
            assert len(test_predictions) == 1
            assert test_predictions.shape[1] == test_targets.shape[0]
        else:
            assert len(test_predictions) == len(test_data)
        assert test_predictions.shape[-1] == test_targets.shape[-1]

        test_predictions = ens.predict(test_gen, summarise=False)

        assert test_predictions.shape[0] == ens.n_estimators
        assert test_predictions.shape[1] == ens.n_predictions
        if i > 1:
            assert test_predictions.shape[2] == 1
        else:
            assert test_predictions.shape[2] == len(test_data)
        assert test_predictions.shape[-1] == test_targets.shape[-1]

        #
        # Repeat for BaggingEnsemble
        ens = BaggingEnsemble(keras_model, n_estimators=2, n_predictions=2)

        ens.compile(
            optimizer=Adam(), loss=categorical_crossentropy, weighted_metrics=["acc"]
        )

        test_gen = generator.flow(test_data)
        # Check that passing invalid parameters is handled correctly. We will not check error handling for those
        # parameters that Keras will be responsible for.
        with pytest.raises(ValueError):
            ens.predict(generator=test_gen, predict_data=test_data)

        # We won't train the model instead use the initial random weights to test
        # the evaluate method.
        test_predictions = ens.predict(test_gen, summarise=True)

        print("test_predictions shape {}".format(test_predictions.shape))
        if i > 1:
            # GAT and GCN are full batch so the batch dimension is 1
            assert len(test_predictions) == 1
            assert test_predictions.shape[1] == test_targets.shape[0]
        else:
            assert len(test_predictions) == len(test_data)
        assert test_predictions.shape[-1] == test_targets.shape[-1]

        test_predictions = ens.predict(test_gen, summarise=False)

        assert test_predictions.shape[0] == ens.n_estimators
        assert test_predictions.shape[1] == ens.n_predictions
        if i > 1:
            assert test_predictions.shape[2] == 1
        else:
            assert test_predictions.shape[2] == len(test_data)
        assert test_predictions.shape[-1] == test_targets.shape[-1]

#
# Tests for link prediction that can't be combined easily with the node attribute inference workflow above.
#
def test_evaluate_link_prediction():
    tf.keras.backend.clear_session()
    edge_ids_test = np.array([[1, 2], [2, 3], [1, 3]])
    edge_labels_test = np.array([1, 1, 0])

    graph = example_graph_1(feature_size=4)

    # base_model, keras_model, generator, train_gen
    gnn_models = [
        create_graphSAGE_model(graph, link_prediction=True),
        create_HinSAGE_model(graph, link_prediction=True),
    ]

    for gnn_model in gnn_models:
        keras_model = gnn_model[1]
        generator = gnn_model[2]

        ens = Ensemble(keras_model, n_estimators=2, n_predictions=1)

        ens.compile(
            optimizer=Adam(), loss=binary_crossentropy, weighted_metrics=["acc"]
        )

        # Check that passing invalid parameters is handled correctly. We will not check error handling for those
        # parameters that Keras will be responsible for.
        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator,
                test_data=edge_ids_test,
                test_targets=edge_labels_test,
            )

        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator,
                test_data=edge_labels_test,
                test_targets=None,  # must give test_targets
            )

        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator.flow(edge_ids_test, edge_labels_test),
                test_data=edge_ids_test,
                test_targets=edge_labels_test,
            )

        # We won't train the model instead use the initial random weights to test
        # the evaluate method.
        test_metrics_mean, test_metrics_std = ens.evaluate(
            generator.flow(edge_ids_test, edge_labels_test)
        )

        assert len(test_metrics_mean) == len(test_metrics_std)
        assert len(test_metrics_mean.shape) == 1
        assert len(test_metrics_std.shape) == 1

        #
        # Repeat for BaggingEnsemble

        ens = BaggingEnsemble(keras_model, n_estimators=2, n_predictions=1)

        ens.compile(
            optimizer=Adam(), loss=binary_crossentropy, weighted_metrics=["acc"]
        )

        # Check that passing invalid parameters is handled correctly. We will not check error handling for those
        # parameters that Keras will be responsible for.
        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator,
                test_data=edge_ids_test,
                test_targets=edge_labels_test,
            )

        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator,
                test_data=edge_labels_test,
                test_targets=None,  # must give test_targets
            )

        with pytest.raises(ValueError):
            ens.evaluate(
                generator=generator.flow(edge_ids_test, edge_labels_test),
                test_data=edge_ids_test,
                test_targets=edge_labels_test,
            )

        # We won't train the model instead use the initial random weights to test
        # the evaluate method.
        test_metrics_mean, test_metrics_std = ens.evaluate(
            generator.flow(edge_ids_test, edge_labels_test)
        )

        assert len(test_metrics_mean) == len(test_metrics_std)
        assert len(test_metrics_mean.shape) == 1
        assert len(test_metrics_std.shape) == 1

def test_predict_link_prediction():
    tf.keras.backend.clear_session()
    edge_ids_test = np.array([[1, 2], [2, 3], [1, 3]])

    graph = example_graph_1(feature_size=2)

    # base_model, keras_model, generator, train_gen
    gnn_models = [
        create_graphSAGE_model(graph, link_prediction=True),
        create_HinSAGE_model(graph, link_prediction=True),
    ]

    for gnn_model in gnn_models:
        keras_model = gnn_model[1]
        generator = gnn_model[2]

        ens = Ensemble(keras_model, n_estimators=2, n_predictions=1)

        ens.compile(
            optimizer=Adam(), loss=binary_crossentropy, weighted_metrics=["acc"]
        )

        test_gen = generator.flow(edge_ids_test)
        # Check that passing invalid parameters is handled correctly. We will not check error handling for those
        # parameters that Keras will be responsible for.
        with pytest.raises(ValueError):
            ens.predict(generator=test_gen, predict_data=edge_ids_test)

        # We won't train the model instead use the initial random weights to test
        # the evaluate method.
        test_predictions = ens.predict(test_gen, summarise=True)

        print("test_predictions shape {}".format(test_predictions.shape))
        assert len(test_predictions) == len(edge_ids_test)

        assert test_predictions.shape[1] == 1

        test_predictions = ens.predict(test_gen, summarise=False)

        assert test_predictions.shape[0] == ens.n_estimators
        assert test_predictions.shape[1] == ens.n_predictions
        assert test_predictions.shape[2] == len(edge_ids_test)
        assert test_predictions.shape[3] == 1

        #
        # Repeat for BaggingEnsemble
        ens = BaggingEnsemble(keras_model, n_estimators=2, n_predictions=1)

        ens.compile(
            optimizer=Adam(), loss=binary_crossentropy, weighted_metrics=["acc"]
        )

        test_gen = generator.flow(edge_ids_test)
        # Check that passing invalid parameters is handled correctly. We will not check error handling for those
        # parameters that Keras will be responsible for.
        with pytest.raises(ValueError):
            ens.predict(generator=test_gen, predict_data=edge_ids_test)

        # We won't train the model instead use the initial random weights to test
        # the evaluate method.
        test_predictions = ens.predict(test_gen, summarise=True)

        print("test_predictions shape {}".format(test_predictions.shape))
        assert len(test_predictions) == len(edge_ids_test)

        assert test_predictions.shape[1] == 1

        test_predictions = ens.predict(test_gen, summarise=False)

        assert test_predictions.shape[0] == ens.n_estimators
        assert test_predictions.shape[1] == ens.n_predictions
        assert test_predictions.shape[2] == len(edge_ids_test)
        assert test_predictions.shape[3] == 1

def test_deprecated_methods():
    tf.keras.backend.clear_session()

    train_data = np.array([1, 2])
    train_targets = np.array([[1, 0], [0, 1]])

    graph = example_graph_1(feature_size=2)

    _, keras_model, gen, train_gen = create_GAT_model(graph)

    ensemble = Ensemble(keras_model, n_estimators=1, n_predictions=1)
    bagging = BaggingEnsemble(keras_model, n_estimators=1, n_predictions=1)
    models = [ensemble, bagging]
    for model in models:
        model.compile(optimizer=Adam(), loss=binary_crossentropy)

    # check that each of the generator methods gives a warning, and also seems to behave like the
    # non-deprecated method
    with pytest.warns(DeprecationWarning, match="'fit_generator' .* 'fit'"):
        ens_history = ensemble.fit_generator(train_gen, epochs=2, verbose=0)
    assert len(ens_history) == 1
    assert len(ens_history[0].history["loss"]) == 2

    with pytest.warns(DeprecationWarning, match="'fit_generator' .* 'fit'"):
        bag_history = bagging.fit_generator(
            gen, train_data, train_targets, epochs=2, verbose=0
        )
    assert len(bag_history) == 1
    assert len(bag_history[0].history["loss"]) == 2

    for model in models:
        with pytest.warns(
            DeprecationWarning, match="'evaluate_generator' .* 'evaluate'"
        ):
            eval_result = model.evaluate_generator(train_gen, verbose=0)
        np.testing.assert_array_equal(eval_result, model.evaluate(train_gen, verbose=0))

        with pytest.warns(DeprecationWarning, match="'predict_generator' .* 'predict'"):
            pred_result = model.predict_generator(train_gen, verbose=0)
        np.testing.assert_array_equal(pred_result, model.predict(train_gen, verbose=0))

redpajama_set_name: RedPajamaGithub


Roominess, Style, Comfort, and a fantastic MPG! That sums up this fantastic Nissan Altima. You want it all, and with this terrific car you`re going to get it! Find out why our dealerships have won DealerRater.com DEALER OF THE YEAR a whopping 10 TIMES! Call, email, or live chat with one of our friendly sales professionals now to schedule your test drive!
Hello, I would like more information about the 2017 Nissan Altima, stock# DP03108.


text:
Alexyz Vaioletama
SCOUTS GRADE
Fountain Valley, CAHometown
Mater Dei High School
6-1Height
14Overall Rank
6Position Rank
StatusSigned
Also ConsideredCalifornia Golden Bears, Florida Gators, Boston College Eagles, Tennessee Lady Volunteers,
ESPN Player Evaluations
Nike TOC-Dec. 10: If recovery is an on going process, then Vaioletama is taking full advantage of rehabilitation. She's not only finally gotten back to where she might have been, she's surpassed and advanced her skills to new levels. She plays physical and strong and isn't shy about mixing things up in the paint. Her play in tight is effective but she has the ability to be effective from the elbows or on the perimeter in a four out. She can start the break or finish it by getting out and running with the guards. Effort is never an issue and the best is yet to come. (Lewis)
USA U17 Trials-June 10: A lot of players entered the trials with a chip on their shoulders and even more feeling as though they had "something to prove." One such player who may have carried both monikers was Vaiolatama. Case in point, Vaiolatama was a returning member of last year's U16 team, but she was also returning from an injury that sidelined her for the entire high school season. The 6-1 forward uses her decided size advantage to muscle past the weaker defenders and stayed in the action on the offensive glass. Her aggressive nature can cause many problems for the sometime passive on-lookers as she scored and rebounded over any supposed opportunist looking to capture a spot on the U17 squad. A lefty slasher, She has a good feel for the game and passes well in and out of the post area. Her jump shot could use a lot of work, but she is not afraid to take those shots if the defense relaxes. A solid 15-foot pull up jump shot can also be located in the game of Vaioletama. (Powell)
Nike Skills-May '10: Knocking the rust off and showing the potential she has in the past. Leaner, physically stronger and more cut, she's playing an aggressive and attacking game at both ends of the floor. She has the ability to work at the small forward spot and still teases with the potential to move to the wing down the road. There's a maturity and confidence to her game that makes her well suited for the college game and beyond.
USA U16 Trials-May 09: Everyone overlooks Alexyz Vaioletama because she has Mosqueda-Lewis and Jordan Adams on her high school team. She also now has them as teammates on the U16 team. The 6-1 forward from Fountain Valley, Calif., is a great athlete who can defend both wings and forwards. On the floor, she rebounds with the bigs and showed in spots that she can explode past the defense and finish at the rim. She shot the ball out to 16 feet, but isn't a player that will make the switch to the wing. She plays within herself and will fit in with the team whether they ask her to play five or 25 minutes per game.
Deep South Classic-April 09: Uncoupled from her more heralded Mater Dei teammates, Kaleena Mosqueda-Lewis and Jordan Adams, Vaioletama mounted a scathing campaign for a spot among the 2011 elites. Mission accomplished, with us and the college coaches, many of whom witnessed her being more than the army of bigger Exodus NYC defenders could handle. The ultra-athletic lefty is super tough in the lane, from which she cannot be dislodged and, allowed to receive the ball, can get off the floor quicker than most and take contact before making deposits with soft, sure hands. The whole package makes Vaioletama a force at the defensive end and around the glass as well. If she shows a smidge more handle and range by the end of summer, she will demand a spot near the very top of the class.
TOC Dec. 08 II: This strong and athletic left hander has lots of tools that might go unnoticed on such a talented high school team. They won't go unnoticed by college recruiters. Her aggressive approach to every aspect of the game makes her force on the floor. She is relentless on the glass and, of course, is a workhorse defensively. She's active at the offensive end and moves fluidly without the ball. She can score around the rim and will have to demonstrate the same proficiency from the perimeter as she matures.
TOC Dec. 08 I: Mater Dei (Santa Ana, Calif.) sophomore Alexyz Vaioletama isn't as heralded as some of the youngsters on this loaded Monarchs team but that won't last long. The 6-1 forward has top notch athleticism which allows her to run and fill the lane as a wing. Add to that a physical style of play that allows her to compete with bigger post players and you have a dynamic player regardless of what position you assign her. She is definitely a can't-miss west coast player.
Club Team: West Coast Premier. She previously played with the Irvine Sol.
Was named to U17 USA National Team but had to pull out because of injury.
First Name: Last Name: Class: Make a selection 2026 2025 2024 2023 2022
All Players »
NCAA Tournament Dates
ESPN.com: Help | Press | Advertise on ESPN.com | Sales Media Kit | Interest-Based Ads | Do Not Sell My Info | Corrections | Contact Us | Site Map | Jobs at ESPN
© 2023 ESPN Internet Ventures. Terms of Use, Privacy Policy, Your California Privacy Rights, Children's Online Privacy Policy and Interest-Based Ads are applicable to you. All rights reserved.

redpajama_set_name: RedPajamaCommonCrawl


In the Quilter program, you can design your own quilts, selecting among many types of quilt blocks built into the software.
You can change the type of quilt layout, selecting the size of the blocks, sashing types and sizes, and type and sizes of borders.
You can preview built-in fabrics and colors, or you can scan your own fabrics and save them in the Quilter program.
Add embroidery to the blocks if you wish – to give you a preview of how the embroidery will look on your quilt.
You may print blocks, appliqué patterns, yardage, and rotary cutting instructions from the Quilter program.
You can also design your own quilt blocks to use in the software.
In the Cross Stitch program, you can design and create your own cross stitch designs.
Included in the software are ten different types of cross stitches.
You can automatically convert pictures to cross stitches, you can fill areas with cross stitches, or you can add stitches one by one.
It is easy to change colors and types of stitches in a design with the Magic Wand tool.
You can create a design and then create a stamp from that design.
You can also add cross stitch lettering in the Cross Stitch program.
Embroidery Library is a design management system in Software 8.
You can view the designs that are built into the software, that you have created within the software, or those that you have downloaded and saved on your computer.
You can view designs that are on a USB stick, on a CD/DVD, or on an external hard drive.
You can quickly organize, rename, sort, delete, zip designs, or convert designs to a different format.
You can also send designs to the machine for stitching from the Embroidery Library.
In addition, you can search for designs with multiple search options; such as design name, category, number of stitches, or number of colors.
Download your copy of V8.1 Software, Lesson 4 Workbook here.


COTTONWOOD HEIGHTS, Utah - A man behind bars for a Cottonwood Heights burglary was linked to another alleged burglary in Sandy that happened a week later.
In May, police say an armed man broke into a Sandy home and was confronted by an 11-year-old girl who lived there. The girl ran to a neighbor's house and the suspect got away, but left investigators a clue that helped them identify him.
"We found a bandana at the back door, the sliding door to the home. Where the individual had gone in and out of the house," said Sandy Police Sgt. Jon Arnold.
The girl's description of the intruder led police to suspect 26-year-old Daniel Bonito, a suspect in another armed burglary nearby. This week, detectives used that bandana to confirm their suspicion.
"We had sent the bandana off to the state crime lab to have DNA tested and that DNA came back and confirmed that Daniel Bonito was the individual at that residence who left that bandana," Arnold said.
Bonito is already in jail for violating parole; he was arrested by police not long after the two burglaries. Now he faces new charges of aggravated burglary and being a felon in possession of a firearm.
Even though Bonito is already behind bars, police say they're glad to solve the crime for the 11-year-old girl.
"Exercising patience, and going through the process, to make sure this individual won't be doing this to other homes, and other children," Arnold said.


When a typical patient in recovery leaves treatment they are in most cases severely challenged with two profoundly practical impediments to leading a successful sober lifestyle.
Finding and holding on to a decent job. In many cases even those who were working prior to going to treatment have burned those bridges and cannot go back to their former place of employment, and for those who haven't had stable employment before it unfortunately doesn't get much easier afterward. Your standard employer is extremely reluctant to hire high risk employees, and by that I mean employees who have a background of instability and chemical dependency. The result of which leaves the recovering addict with very narrow prospects of finding a decent job in an already competitive workforce. This unfortunate reality leaves the recovering addict in a financially strained situation, coupled with an overall feeling of helplessness and despair. Add to the equation – a lack of productivity (never good for self esteem) with an over abundance of idle time and you have fertile ground for a very immanent relapse.
Finding a safe and affordable form of housing. More often than not recovering addicts do not have great credit, nor do they have co-signers lined up to sign an apartment or studio lease with so many of their family and friends having been burned in the past. Staying in a sober living for on a long term basis is also not a viable option in most cases once their clinical care comes to an end and the well of funding dries up. The inevitable and unfortunate result is that they are very close to being homeless, with all of the unhealthiness and vulnerability that this prospect brings. Many will start couch surfing and staying by friends. Besides for the lack of stability and a safe and sober environment this makes them reliant and codependent and susceptible to falling into the wrong crowd again.
Our vision is to provide sober apartments – a safe and sober long-term housing solution coupled with a decent job ensuring stability and productivity. The first step is to introduce recovering addicts to different job opportunities as they are winding down their outpatient treatment. Once they are have clarity on a specific direction and job description we will then make the introduction to prospective employers and corporations with our pitch to them that we will provide housing and drug testing as well as mandatory meetings and consistent interactions with their sponsor thus creating a platform of accountability. This would then fundamentally mitigate the risk of undetected continued drug use resulting in poor job performance. Their employers would pay their rent directly from their salaries helping with their money management skills as well as guaranteeing they have a safe and sober place to live in.
The combination of this triangle would effectively solve the housing and job challenges, as well as provide a community of like-minded people intent on living a meaningful sober lifestyle.


Introducing the new Rieker 70562 Boots with a stunning detailed design with added buttons, stitched detailing and a folded collar. These heeled ankle boots are the perfect addition for your wardrobe this season with a versatile style fit to wear with anything and everything! With a roomier structure, you will always have a spacious fit, allowing the feet to breathe and no tightness when sitting or walking for long periods. Wear these with a warm winters hat and coat to complete a stylish Winter look.
RIRICON sole cushions the important areas of your feet, particularly the heel and the ball of the foot for maximum shock absorption and the ultimate in comfort. They are ideal for walking without fatigue thanks to the lightweight materials used to make them. Beautifully soft fur linings are used to make your feet feel amazingly warm and snug. Available in various sizes.
These are the most comfortable shoes I've ever had. Lightweight and a lovely soft lining.


text:
@{

# Script module or binary module file associated with this manifest.
# RootModule = ''

# Version number of this module.
ModuleVersion = '0.5.0'

# Supported PSEditions
CompatiblePSEditions = 'Core', 'Desktop'

# ID used to uniquely identify this module
GUID = '272a9e53-defc-4e25-af4d-122bd41ad458'

# Author of this module
Author = 'Microsoft Corporation'

# Company or vendor of this module
CompanyName = 'Microsoft Corporation'

# Copyright statement for this module
Copyright = 'Microsoft Corporation. All rights reserved.'

# Description of the functionality provided by this module
Description = 'Microsoft Azure PowerShell - DevTestLabs service cmdlets for Azure Resource Manager in PowerShell and PowerShell Core'

# Minimum version of the Windows PowerShell engine required by this module
PowerShellVersion = '5.1'

# Name of the Windows PowerShell host required by this module
# PowerShellHostName = ''

# Minimum version of the Windows PowerShell host required by this module
# PowerShellHostVersion = ''

# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
DotNetFrameworkVersion = '4.7.2'

# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
# CLRVersion = ''

# Processor architecture (None, X86, Amd64) required by this module
# ProcessorArchitecture = ''

# Modules that must be imported into the global environment prior to importing this module
RequiredModules = @(@{ModuleName = 'Az.Profile'; ModuleVersion = '0.5.0'; })

# Assemblies that must be loaded prior to importing this module
RequiredAssemblies = '.\Microsoft.Azure.Management.DevTestLabs.dll'

# Script files (.ps1) that are run in the caller's environment prior to importing this module.
# ScriptsToProcess = @()

# Type files (.ps1xml) to be loaded when importing this module
# TypesToProcess = @()

# Format files (.ps1xml) to be loaded when importing this module
FormatsToProcess = '.\Microsoft.Azure.Commands.DevTestLabs.format.ps1xml'

# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
NestedModules = @('.\Microsoft.Azure.Commands.DevTestLabs.dll')

# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
FunctionsToExport = @()

# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
CmdletsToExport = 'Get-AzDtlAllowedVMSizesPolicy',
    'Get-AzDtlAutoShutdownPolicy', 'Get-AzDtlAutoStartPolicy',
    'Get-AzDtlVMsPerLabPolicy', 'Get-AzDtlVMsPerUserPolicy',
    'Set-AzDtlAutoStartPolicy', 'Set-AzDtlAutoShutdownPolicy',
    'Set-AzDtlVMsPerUserPolicy',
    'Set-AzDtlAllowedVMSizesPolicy', 'Set-AzDtlVMsPerLabPolicy'

# Variables to export from this module
# VariablesToExport = @()

# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
AliasesToExport = @()

# DSC resources to export from this module
# DscResourcesToExport = @()

# List of all modules packaged with this module
# ModuleList = @()

# List of all files packaged with this module
# FileList = @()

# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
PrivateData = @{

    PSData = @{

        # Tags applied to this module. These help with module discovery in online galleries.
        Tags = 'Azure', 'ResourceManager', 'ARM', 'DevTestLabs'

        # A URL to the license for this module.
        LicenseUri = 'https://aka.ms/azps-license'

        # A URL to the main website for this project.
        ProjectUri = 'https://github.com/Azure/azure-powershell'

        # A URL to an icon representing this module.
        # IconUri = ''

        # ReleaseNotes of this module
        ReleaseNotes = 'Update release with latest service features and serialization fixes'

        # Prerelease string of this module
        # Prerelease = ''

        # Flag to indicate whether the module requires explicit user acceptance for install/update/save
        # RequireLicenseAcceptance = $false

        # External dependent modules of this module
        # ExternalModuleDependencies = @()

    } # End of PSData hashtable

} # End of PrivateData hashtable

# HelpInfo URI of this module
# HelpInfoURI = ''

# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
# DefaultCommandPrefix = ''

}


Well, sort of talking. Click here to be amazed and entertained.
Hey, knock it off, She's my mom! So what, she's my auntie! Give her back Brucie! No! its my turn!
Happy 1st birthday! Logan gets a wolverine toy from Brucie.


text:
2023 Academy Award Nominations
Today is one of the most exciting days for anyone who blogs about movies and Oscars...nomination day! Like every year, there's plenty to like, but also plenty to complain about. Here are a list of the nominees + my thoughts.
We really wasted a Best Picture nomination on Avatar, huh? When The Woman King, the Menu, Babylon and Glass Onion exist? Triangle of Sadness is the big surprise here. It was good, but not over the other films I named, in my opinion.
Daniel Kwan & Daniel Scheinert – Everything Everywhere All At Once
Todd Field – TÁR
Ruben Ostlund – Triangle of Sadness
NO women. No Gina Prince-Bythewood? No Sarah Polley? We had back to back women winners the last two years now shut out women again completely? Boring.
Cate Blanchett – TÁR
Okay, so a LOT is being made about Andrea Riseborough's nomination, which seemingly came out of nowhere. No one heard about To Leslie until a few weeks ago, but the real problem with this category is Michelle Williams. Her performance in The Fabelmans was AWFUL, and two amazing performances by Viola Davis and Danielle Deadwyler are missing. I'm not sticking that on Andrea, I'm sticking that on Michelle.
Austin Butler – Elvis
Paul Mescal – Aftersun
Bill Nighy – Living
Paul Mesal is the big surprise in this category. I still need to see Aftersun and Living. I just hope Farrel or Fraser wins. I can't take Butler and his Hilaria Baldwin commitment to the accent any longer.
Best Supporting Actress
Angela Bassett – Black Panther: Wakanda Forever
Stephanie Hsu – Everything Everywhere All At Once
This category is perfect. 10/10 no notes. (I know Dolly De Leon would've been a nice addition as well, but still)
Brian Tyree Henry – Causeway
I can't believe these people watched The Fabelmans and nominated Judd Hirsch's 5 minute performance over Paul Dano's, who gave the best performance in the entire movie. Ridiculous. Happy to se Brian Tyree Henry in here on principle. I will definitely be watching Causeway next week.
This is about what I was expecting.
Oscar nomination #2 for Rian Johnson! Top Gun: Maverick making it here made me laugh my ass off. I love the movie, it's in my Top 10 of the year, but that screenplay was the weakest bit.
Guillermo has this in the bag, but I'm just over here rooting for Marcel.
All That Breathes
Navalny
Fire of Love!! I adore this doc. I still don't get the love for All The Beauty and the Bloodshed.
Best International Feature
The Quiet Girl
The Quiet Girl made it!!! I was so worried it would get snubbed. This might be the first time where I've seen the majority of these nominees before the ceremony. I just need to see Close and EO.
All Quiet on the Western Front
What the fuck is Bardo? I wish The Quiet Girl was here too. I didn't like Empire of Light very much, but it's gorgeous so I'm happy to see it here at least.
Best Costume Design
The Woman King could've gone here too. We didn't need Elvis.
Best Film Editing
I like it...not so much Elvis but everything else.
Best Makeup & Hairstyling
All Quiet on the Western Front
The Batman deserves to win this award for what they did to Collin Farrell's beautiful face. I was kind of hoping Barbarian would sneak in here but that was such a long shot.
Another wasted nomination on Avatar.
Best Sound
Go away Avatar!
Fine, Avatar. I'll let you have this. My condolences to Doctor Strange and the Multiverse of Madness. Not a great movie, but great visuals.
Babylon, my baby. At least you'll win this.
Best Original Song
Tell it Like a Woman – "Applause"
Top Gun: Maverick – "Hold My Hand"
Black Panther: Wakanda Forever – "Lift Me Up"
RRR – "Naatu Naatu"
Everything Everywhere All At Once – "This Is A Life"
Ludwig and Ryan are nominees for Lift Me Up! India must feel stupid for not submitting RRR in International Film now considering how well loved RRR is. And no Caroline, THANK GOD. Taylor has written better songs for movies.
Best Animated Short
I have no idea what My Year of Dicks is but it's now my most anticipated film. On to my annual Oscar Short Race!
Best Documentary Short
Haulout
I haven't seen any of these, but I'm excited to go looking for them.
Best Live-Action Short
An Irish Goodbye
Ditto, but I love doing my annual short film watches.
joel65913 January 24, 2023 at 10:56 AM
Ya know I use to LIVE for Oscar nomination morning and would cram both before and after to see as absolutely much as possible of the nominated films and performances. But distribution is so fragmented now on top of which I'm still not comfortable returning to the cinema and spending a couple of hours surrounded by a crowd who are either chatting throughout the movie (if you want to talk stay home! GRRR!!) or coughing annoyances that I see practically nothing until it's been out a while.
I've lost my passion for the award show as well which was once a glittering night of a cavalcade of stars. Now since with a few exceptions real STARS don't exist (and the ones that do are rarely called upon to present instead we get a pageant of flash in the pans) it's a slog on bad jokes, meaningless montages and dull musical numbers. Hell even the In Memoriam is usually abrupt, incomplete and focused on whoever is singing rather than the people supposedly being honored! I wish for once they would try and model it on the yearly tribute TCM does which is always dignified, inclusive and respectful.
That's my long-winded way of saying I have seen next to nothing in contention. I am however delighted that the underrated Colin Farrell finally landed a long overdue nomination. Fraser too, though I don't think he's as skillful an actor as Colin who I would love to see win. Otherwise I really have no dog in any of these fights.
Brittani Burnham January 24, 2023 at 12:42 PM
lol well I'm always thankful for you coming to visit me and I never think your comments are long-winded! I really want Farrell to win. I think he's better than both Butler and Fraser. I haven't seen the other 2.
Birgit January 24, 2023 at 1:42 PM
I have seen the Fabelmans and Banshees. I hope Colin or Brendan win. I want to see The Whale. I find Michelle Williams over-rated and she annoyed me in that movie. I haven't seenmuch of anything because, like Joel, I do t want to be in a yheatre full of hacking viruses. I wish I had TCM...I would never leave the couch! I still enjoy watching the awards even though they bring out " stars" that I say...Who? I am surprised that Viola Davis wasn't nominated and I am not surprised by Avatar because Cameron will where himself out for anything to get noticed. I hate that jerk. Top Gun is in there just because they made a lot of money..blecchhh.
Brittani Burnham January 24, 2023 at 2:02 PM
Viola Davis getting snubbed is insane. The fact that the Woman King got ZERO nominations is easily the worst thing that happened.
thevoid99 January 24, 2023 at 4:45 PM
No women nominees for Best Director. That shit is wrong. I can't believe they nominated Diane Warren again for Best Original Song. Why? She's just meh.... I haven't seen any of the films nominated for Best Picture. This is kind of rare for me at this moment.
That list for Best Supporting Actress.... anything goes with that one and I have no problem with who should win that as that is a fucking list. I have seen one of the films nominated for Best Live-Action short in Le Pupille as that film is MUST-SEE and is available on Disney+. I thought it was fucking great. I'm rooting for that film.
Brittani Burnham January 25, 2023 at 10:07 AM
I just watched Le Pupille last night and didn't really care for it. I'm making my way through the shorts now. No women in director is stupid. There were plenty of better directed films by women out there.
As usual, I've seen only a few of these. I'm in agreement with you in places where I've seen the movies in question. And, like you, I am positive that Pinocchio is going to win Animated Feature, but it shouldn't, and as a GDT fanboy, it hurts me to say that. Marcel was perfect, though--the sort of film that would make the world a better place if everyone saw it.
I'd have loved to see a nomination somewhere for After Yang, and I will be forever salty that Pedro Pascal was ignored for a truly epic performance in The Unbearable Weight of Massive Talent. I am equally salty that the Roku Channel didn't make Weird Oscar-eligible.
I agree. Marcel is just so special. Honestly, I prefer Turning Red to Pinocchio as well. Roku should've campaigned at the Emmys if they didn't meet Oscar eligibility. I think he would've had a shot there.
Chris January 25, 2023 at 4:11 PM
Top Gun getting nominated for screenplay is a bit silly, but I'll take it. What's confusing to me is how it didn't get nominated for cinematography though. >.>
Brittani Burnham January 26, 2023 at 7:48 AM
I know! Did voters confuse the two somehow? lol
Cinema Recall January 27, 2023 at 2:41 AM
i watched Fire of Love last night really enjoyed that Doc my pick is still Beauty and Bloodshed but I hope the other wins
I really fell in the minority with All The Beauty and the Bloodshed. I just didn't think it meshed well. There was another neon doc too, Three Minutes, A Lengthening that I thought was far better. Fire of Love is still my #1 Though Navaly was really compelling as well.
Review: Infinity Pool
Thursday Movie Picks - TV Edition: 2022 Freshman S...
Review: When You Finish Saving The World
Review: Free Skate
Review: Argentina, 1985
2023 Blind Spot Series: Steel Magnolias
Thursday Movie Picks - 2022 Releases
2023 Screen Actors Guild Nominations
2023 Golden Globe Winners
Review: M3GAN
2023 Golden Globe Predictions
What I Watched on TV in December
Review: White Noise


text:
Technology and Information Sharing in Disaster Relief through the Virtual OSOCC
This research paper seeks to examine the extent to which technological advances can enhance inter-organizational information sharing in disaster relief. It focuses on the Virtual OSOCC (On-Site Operations Coordination Centre), which is a part of the Global Disaster Alert and Coordination System (GDACS) under the United Nations Office for Coordination of Humanitarian Affairs (UN OCHA). The online platform, which has been developing for more than a decade, provides a unique insight into coordination behaviour among disaster management agencies and individual actors.
The paper studies the analysis of a complete database of user interaction including more than 20,000 users and 11,000 comments spread across approximately 300 disaster events. Controlling by types, severity, location-specific vulnerabilities and the overall trends, it finds that the introduction of new features have led to increases in user activity. It supplements the data-driven approach with evidence from semi-structured interviews with administrators and key users, as well as a survey among all users specifically designed to capture and assess the elements highlighted by both interviews and data analysis.
You can consult the paper here.
#Sudden Onset Crises #All Hazards
PLOS ONE - Technology and Information Sharing in Disaster Relief
A research paper exploring how technological advances can improve inter-organizational information sharing during disaster relief coordination.
UNISDR – Words into Action Guide for Man-Made and Technological Hazards
The Words into Action (WiA) Implementation Guide for Man-Made and Technological Hazards made by UNISDR, OCHA and UN Environment.
Addendum to the OECD Guiding Principles on Natech Risk Management
The second addendum to the OECD Guiding Principles for Chemical Accident Prevention, Preparedness and Response, which outlines considerations for natural-hazard triggered technological accidents.
UN Environment: APELL Handbook (second edition)
The Second Edition of the Awareness and Preparedness for Emergencies at Local Level (APELL) Handbook.
WHO – Chemical Releases Caused by Natural Hazard Events and Disasters
Guidelines and information to planners in the health sector and to public health authorities seeking to learn more about chemical releases resulting from natural hazard events.


By kdoak| 2018-04-25T23:31:22+00:00	April 25th, 2018|News|Comments Off on T-SHIRTS ARE HERE!
FALL OPEN HOUSE SATURDAY, OCTOBER 8TH.
By kdoak| 2018-04-25T23:28:49+00:00	April 25th, 2018|News|Comments Off on FALL OPEN HOUSE SATURDAY, OCTOBER 8TH.


I loved all of the black cardstock I've been using with the chalk look, so I thought I would make a birthday card like that.
I like to do things in a row, say brads, buttons, or even this Viva Décor look. But lining them up just right is near impossible, and I thought, why not draw some circles that are all spaced out, then the work and guessing is done for me? So I did! I used the Target brand up & up gel pens in the Chomas Creations adjustable pen holder to draw on black cardstock.
This was super easy in Studio, I just drew a line where I wanted my circles to be, used the rhinestone feature (1), chose the edge feature (2), chose the size rhinestones I wanted (3), and then spaced them further apart (4). Voila! All the guess work done for you!
Then I filled all of the circles in with Viva Décor. This stuff is awesome! I've had it awhile. The difference in this is when it dries it is still 3d!
Amy - what is your favorite black cardstock to use for things like this?
Mary I just use Bazzill smooth cardstock.


LOS ANGELES (AP) -- Amazon.com Inc. said Wednesday that it will produce a pair of new comedy shows and three new kids shows for viewing on its video streaming service, capping a one-of-a-kind experiment that gave viewers a say in the selections.
The five shows were culled from 14 pilots that were put up for free on its website and made available over Amazon's video apps on mobile devices and game consoles starting in April. Executives looked at ratings, reviews and view counts in a process that upended traditional TV show development. Traditional TV studios generally screen pilot episodes before small focus groups and executives before determining which go into production.
The shows announced are Amazon's first original series.
"Once you have hundreds of thousands of people watch a specific pilot, you're not talking about a focus group anymore," Price said in a phone interview from Amazon's Seattle headquarters. "You're asking your actual audience how they feel about it."
The comedies selected include "Alpha House," created by Garry Trudeau and starring John Goodman. It's about four senators who rent a house together in Washington. Meanwhile, "Betas" follows four friends and the new mobile social networking app they are developing.
The new kids shows are "Annebots," which centers on a young scientist and her robot helpers, "Creative Galaxy," an animated series, and "Tumbleaf," which is aimed at preschoolers.
Amazon has been trying to develop movies and TV shows based on thousands of scripts it has received since soliciting them in November 2010, although only one of the 14 pilots made for viewer feedback came out of that process. It was "Those Who Can't" and wasn't ultimately selected.
Another show that didn't make the cut was "Zombieland," which came from the creators of the hit Columbia Pictures movie of the same name. Price said it is possible for some failed pilots to be reworked and tested again.
Price said that 10 episodes will be made for each of the two comedies. Amazon has yet to determine how many episodes of each kids show will be made. The series are to air in the U.S., Britain and Germany later this year or next year.
Other than some possible free sampling, the videos will be made available only to subscribers of Amazon Prime, the online retailer's $79-a-year membership plan. Amazon Prime also provides customers with free two-day shipping on certain items bought at Amazon.com, a book borrowing club and other videos to watch.
Amazon is still considering whether to release all the episodes for a season at once — the way Netflix Inc. has done with its original series such as "Arrested Development" — or to release them in spurts or one at a time.
Although Netflix didn't have subscribers watch pilots before committing to a full season, the service has extensive data on viewer habits. With "Arrested Development," Netflix studied how the first three seasons performed on its service after the series' cancellation by Fox in 2006.
AP Business Writer Bree Fowler in New York contributed to this story.


text:
It's A Beautiful Day, Live at the Fillmore '68
Anyone who followed rock back in the later sixties with any seriousness or for that matter anyone younger who has a sense of the history knows something about the Frisco band It's A Beautiful Day, I'll imagine. "White Bird" was their most celebrated number and it was played a great deal on the "alternative" FM rock stations then. But there was more to them than that song, of course.
They were one of the first bands to replace electric guitar solos with those of the electric violin, of David LaFlamme, who also happened to be leader, songwriter and lead vocalist for the band. I am trying to think who if anybody had an electric violinist earlier? I believe they predate the Mothers with Harris and later Ponty, the Flock with Goodman, the later Animals, Seatrain, who else? The point is that it was a distinguishing factor with the band and LaFlamme set the pace.
They had two albums on Columbia then faded. But in the interim they made some solid psychedelic period rock music. There's a new unissued recording out, Live at the Fillmore '68 (Classical Music Vault 0220), and it is just that.
The sound quality is very good, the band is charged up, they do their repertoire of the time, originals of note, much of it ending up on the first album (White Bird), some on the second (Marrying Maiden) and a few never recorded in the studio ever, at least in terms of those releases.
What's especially nice is the band has a hard hitting live sound that is perfectly captured, and they venture into expanded jams and contrasting moments pretty often compared to the studio sides. The band is tight and spacy as needed, Patti Santos is there on her Slick-esque vocals in tandem with David, there are the expected violin niceties and at least to me it wears well.
It comes with a bonus DVD disk that catches up with David and the band in later years, the struggle to keep going in changing times, footage of the band in recent years and dialog by LaFlamme about it all. It will likely appeal mostly to confirmed fans of the era and the band and it's certainly nice to see.
If you dug the band then, you'll dig this. It all has immediacy that will appeal to anyone with sympathies to a time that was indeed seminal for rock. There were an awful lot of great bands coming up then. It's A Beautiful Day was one of them.
Labels: classic rock live 1968, david laflamme, electric violin in rock, it's a beautiful day live at fillmore '68 gapplegate guitar blog, psychedelic live music from the era, psychedelic san francisco
Grego Applegate Edwards January 10, 2014 at 9:59 AM
I just remembered another notable band with elec violin from that era--The Fourth Way with Michael White. Good band! --Grego
Howard Alden / Andy Brown Quartet, Heavy Artillery...
Bryan and the Haggards, Merles Just Want to Have F...
Rich Rosenthal, Falling Up
Bob DeVos, Shadow Box
Mark Lettieri, Futurefun
Adam Lane Trio, Absolute Horizon
George Cotsirilos Trio, Variations
The Billy Sea, Global Americana, Billy Cardine
Dusan Jevtovic, Am I Walking Wrong?
Fred Fried and Core, Core Bacharach
Tom Kennedy, Just Play!
Luis Lopes Humanization 4tet, Live in Madison
Harrison Bankhead Quartet, Velvet Blue
Totem>, Voices of Grain, Blancarte, Drury, Eisenbe...
Toronzo Cannon, John the Conquer Root
Frank Potenza, For Joe


text:
Chris Pratt to Romance Wife Anna Faris on CBS' Mom — Get Details
By Andy Swift / October 21 2016, 9:22 AM PDT
Something tells us that Anna Faris will have plenty of chemistry with her next co-star.
Faris' real-life husband Chris Pratt (Parks and Recreation? Everwood? Maybe you've heard of him?) will appear in a 2017 episode of CBS' Mom, according to Entertainment Weekly.
Fall TV 2016: How to Improve 14 New Shows
Pratt will play a hunky horseback riding instructor who catches Faris' character's eye. The only problem? He's the nephew of Mimi Kennedy's Marjorie, who labels him strictly off-limits.
Also on tap for Mom's upcoming fourth season, premiering Oct. 27 at 9/8c: a reunion between former West Wing co-stars Bradley Whitford and Allison Janney.
Your thoughts on Pratt and Faris' on-screen romance? Hopes for Mom's future in general? Drop 'em in a comment below.
TAGS: Anna Faris, CBS, Chris Pratt, Mom


Went to see the new Star Trek film this afternoon on the IMAX in town, and I thought it was awesome! Visually, it's stunning, and the casting is spot on (and after a minute or so, I forgot about Sylar and just saw Zac Quinto as Spock!) And watching it on such a big screen was just amazing.
It's a very clever re-boot from JJ Abrams, there are lots of nods to the original TV show, but it's very much a mainstream-type movie, rather than being a total geek-fest! As well as great characterisation and effects, I thought there were some clever twists in the plot.
One thing I really liked was the cinematography, and the way that they made such use of lens flares throughout the film. I originally thought that it was post-production thing, but apparently, unless it was a CG scene they were all done in camera by shining lights straight down the lens! I guess some people will have really disliked them, and I'll admit that maybe they went a bit over the top occasionally, but generally I thought it was a very clever device to give the film a very distinctive look.
Anyway, if you haven't seen it yet, I'd definitely recommend it, and I can't wait for the sequel!
Just got back from a nice meal at Jamie's and I have to say that tonight I've seen probably the worst film ever! Well, 51 minutes of it because that's all we could take!! It was Miami Vice, with Colin Farrell and Jamie Foxx, and it was dire! Bad script, bad dialogue, no character development… basically just shots of fast cars and speedboats!! Total rubbish – that's time I'm never going to get back!! Apart from that though, it was really nice spending the evening with Jamie and Dean, and we ended up watching a DVD of Victoria Wood instead!!
Anyway, all this weekend I've been over at some mills in Compstall on the set of a short film called 'Soul Shutter', starring Georgia Taylor (who used to be in Coronation Street and has done some other big dramas since). It's being produced by Hamish and Rob, and they've managed to rope in a load of people to give their skills for free to get it made. Somehow, I've been persuaded to do all the computer graphics stuff for it, and having been there all weekend directing the CG sequences, I've realised that it's going to be a lot more work than I'd originally been led to believe!!
There's a lot of action that takes place within photographs, so a lot of it was shot on a totally white set, and I'm going to have to key in loads of effects, as well as also doing moving images in photos on a wall, a bit like you see in the Harry Potter films… only with the budget being a few million quid lower!! Was a really good experience though, and I hope I can make it look expensive! I've got a load of photos from my phone of the shoot here.
On Friday evening I got a call from Jamie seeing if I was up to anything because there was a group heading off to do some bridgeswinging! I went with them a few years ago so I knew that there was no way I'd do it, but I said I could bring my Z1 and film them throwing themselves off the side of the incredibly high bridge! It was really cool and I got some nice shots of people leaping, though obviously because it was dark and my light can only really illuminate short distances you don' really get a feel of the whole action. I'll probably try and cut something together and maybe stick it up on Youtube or something.
I kind of wish I could summon up the courage to do it, but the thought of jumping into darkness really doesn't appeal to me! Not convinced either that it would make the slightest bit of difference if I was able to see where I was jumping but maybe I should add it to my list of things to do before I die… just as long as I don't die doing it!
I got here about 5.30, and because I was a couple of hours early, I had the pleasure of helping to set everything up! We put up 2 gazebos in the garden, and decorated them with fairy lights and genuine Egyptian lanterns! I made a slight effort to look Christmassy… I had planned to wear a santa hat, but I couldn't find the one I used to have, so just attached some tinsel to my jeans and shoes!
The only other person I knew here was Helen who was at uni a the same time as me and Ali, and she was here with her boyfriend Pete (boyfriend/girlfriend seem such odd words to use when you're our age!) and he was a really nice guy. Spent a lot of the night chatting to both of them which was cool, and then they popped in this morning before heading off to Cornwall for a week's holiday. I'm not jealous that they've got a relaxing week ahead of them!!
I've been out pretty much every night this week! After the Cannonball night on Tuesday, Wednesday night saw me head up just north of Bolton to watch a DVD with John Cieszynski, and it was a nice chilled out night. We grabbed some chips and just vegged out in front of Mission Impossible III, which I'd seen at the cinema but had kind of forgotten exactly what happened in it!
A film though that I have seen twice in the last couple of weeks (so therefore could remember most of the plot!) is Casino Royale. I went to see it the other week with Jamie, Sean and Selina, but Sarah hadn't been to see it, and since everyone else already had, I said I'd go with her and watch it again!
We went to the Odeon in town, and I'd suggested we try out the posh seats in 'The Gallery' – which I'd never tried before but was keen to give it a go… and it was really cool!! You get up there and you're welcomed into a bar where you can have free popcorn, nachos, chocolates and soft drinks (though technically you've paid for it with your more expensive tickets! ) There was even a little grand piano in there(!), and you can also buy drinks at the bar and take them in with you when you watch the film – which I didn't do because I was driving, but it meant Sa could get herself a nice glass of red wine!
And then into the cinema itself… basically it's like a balcony over the main cinema, with just four rows of seats – but these aren't your normal cinema-style seats. They're kind of blocked off into pairs, with a little arm-rest table either side, and they're much bigger and more comfortable than regular ones, so we could just kick off our shoes and slouch in the seats with our feet up on the ones in front (which we probably weren't supposed to do, but hey! ) And I didn't mind watching the film again because it is really good, and it was nice to spend the evening with such good company!
So, it was a really good experience and one I'd definitely like to do again – just need to find another good film!
Well I'm in bed typing this post on my new MacBook Pro. I finally succumbed to the world of Apple and ordered the newly released Mac laptop and it finally arrived this morning! I'm trying to get used to using the keyboard and trackpad… it's quite different to my desktop and I keep hitting extra keys and it makes me look like I can't spell anything!
Anyway, my other computer is currently rendering the grading for the Cannonball documentary and when all that's done I can re-import it and then put it onto tape to send off to ITV. It's really cool working on something that's going out to such a wide audience. It's on ITV1 next Tuesday at 11pm, and then will be repeated endlessly on Men & Motors – though to be honest I'm more excited about the national ITV showing!
Other stuff – went to see 'Casino Royale' on Saturday night with Jamie, Sean and Selina, and it was really good. It's only the second Bond film I've seen, the other being 'Die Another Day', and this was a really good action film, but I think I preferred some of the tongue-in-cheekness of Brosnan's Bond. Beforehand we went round the Christmas markets in Albert Square, and had a hot pork roll from a stall with a whole cooked pig on the counter! Was a really fun night, and I know I need to do more stuff like this, otherwise I'm going to end up turning into a total recluse who just works all the time!
…although it certainly feels like it! I'm basically spending most of my time at present editing the Cannonball 8000 documentary which is on ITV1 at the end of the month. Very long days, but it's looking really good, and hopefully people will really like it.
Anyway, I have managed to do a couple of sociable things this week as well. On Sunday afternoon I went up to Middleton to do a bit of babysitting with Sarah… she was looking after Grace (who's one next week) whilst Colin & Caroline took Olivia to see a kids musical, so I went along probably more to keep Sa company that be much use otherise! Grace was asleep when I arrived so we watched a bit of TV (the Top 20 Boy-Bands(!)… worryingly I did know most of them, but at least I wasn't the one who knew all the words to the songs… hehe) and then when Grace woke up I helped keep her entertained with a toy shark and a beaker of water! It was good fun actually – I managed to steer well clear of the nappy changing… I don't know how I'd ever manage to do that, but maybe if I have my own kids it would be a lot easier!
Then when I got back home, I got a call from Jamie asking if I wanted to go to the cinema – but they were already in the queue, and the film was starting in 15 minutes, so I had to move quickly to get there in time! Anyway, I managed to get there with a couple of minutes to spare, and found Jamie who was with Dean and Sean, and we went in to see 'The Prestige' – a film about two rival magicians… I hadn't heard anything about it beforehand, but I thought it was pretty good, although you had to suspend your disbelief to get over a pretty major part of the plot!
Then on Tuesday night, I went round for a meal at Jamie's house. I had expected that we were going to go out and grab something to eat in town, but it was a really nice surprise to find he'd cooked, and that we were also being joined by Sean, Celia and Sarah. My fussy eating kind of made an appearance – Jamie had done rice with the chicken, but he suddenly remembered that I'm a nightmare to cook for, and I told him I didn't mind just having it without, but he rustled up some mustard mash for me instead! And the main part was something I wouldn't normally have had – he'd done the chicken in a slightly curried crème fraîche sauce, and although I did pull a bit of a face when I took the first mouthful, I did actually quite like it! Maybe this is another small step on the road to eating the same food as everyone else!!
Got up this morning to see a thin layer of snow on the ground, but in the last half hour it's started snowing properly!
Not sure how long it will last 'cos the BBC's weather website reckons we've got rain forecast for the rest of the week, but it was cool to see out first proper snow this winter!
Other stuff… took myself off to see the new Harry Potter film at the cinema on Saturday night, and I thought it was really good – although I know that people who've read the book are disappointed that apparently a lot had to be cut out to get it to fit in one film. The first time I saw Harry Potter was this time last year… I've kind of watched them in a funny order… episode 3, then episode 1, now the fourth one… and the second film is on TV this Saturday so I'll watch that then!! I know there's been quite a lot of debate over Harry Potter, and whether it's a bad influence and all that, but from watching the films, I can't see that much of a difference in subject matter to say that of Lord of the Rings, or the Chronicles of Narnia. They're all basically stories of good against evil – maybe the books are different – I don't know, not having read them, but there was nothing in the film that made me think they're bad.
So, I'm officially another year older.
Got 4 birthday cards… which was nice I suppose.
Anyway, the presentation was to take place at 11.30am on Thursday morning, so I was at Manchester Airport for half seven to catch an 0845 flight to Southampton. But whilst I was waiting in the departure lounge, I noticed the screens changed to show that the flight would be delayed by just over half an hour, which meant I'd be pushing it for time at the other end. So I waited until 9.20, when we were then told that there were technical problems and we'd be getting more information at half ten. Obviously this caused me slight problems since it was going to take me half an hour to get to Portsmouth from the airport, and the earliest I was going to get to Southampton looked to be 11.30 – the same time as the presentation!
We actually got our update at quarter past eleven, and we were told that a new plane would be arriving at noon, but there was really no point with me getting on it – but apparently if you remove yourself from a massively delayed flight, you don't get your money back… they only do that if it's cancelled! Anyway, what eventually happened is that I rearranged to travel on the same flight on Friday morning, with the return flight first thing yesterday morning because the guys I needed to meet wouldn't be around until 6pm!
Friday's journey went a lot smoother, and since the presentation wasn't until the evening, I had a few hours to look around bits of Portsmouth, and went to take a look at HMS Victory, and also around Gunwharf Quays which is where I was staying overnight at a Holiday Inn. The talk went okay I guess… it was a bit awkward because firstly it was someone else's presentation, and I didn't have Powerpoint or our DVD to use because it was rescheduled last minute!
Later on that evening, I went to the cinema (which handily was right next to the hotel!) to watch 'Cinderella Man' – Russell Crowe and Renée Zellweger's new film, and it was excellent. Quite violent in parts I guess because it's about boxing, but it all took place within the ring, so the context allowed for it. I'll be really surprised if it doesn't pick up a few Oscars next time round.
Then yesterday, I had to get up at 4.30am to get to Southampton for my flight back up to Manchester… so that's 3 early mornings in a row. I feel wrecked now! I'm not a morning person at all!
I was over in Sheffield yesterday and last night giving Jamie a hand collecting some furniture for his new house that he's in the process of buying. He was given it by James' grandparents who are moving to a smaller house (apparently the person who's bought their current one is the manager of Sheffield Wednesday, Paul Sturrock!), and they've given him a couple of beds, plus a table and chairs. So we strapped each of the beds onto the roof of each car, and filled up the backs with other bits and pieces!
Then later on the afternoon, I helped him by giving him a hand with repairing a chair of Darren's, which was hand-made by his sister, that which had split in half across the seat. When I say I was 'helping', it was more a case of holding bits of wood, and supporting clamps! I think he did a really good job, and when we took all the clamps off this morning, the glue and dowels appeared to have done their job because Jamie was able to sit on it without it falling apart again!
Then last night we stayed over at his mum and dad's house, so decided to rent and watch 'I, Robot' – and I thought it was a really good film… when it came out I didn't bother going to see it because I thought it might be a bit rubbish, but it actually had quite a good story to it.
Other stuff… my car failed its MOT on Wednesday. I've left it with my brother to do some work on it, so have borrowed mum's Peugeot 205 which is quite different to my trusty Fiesta! It's taking a bit of getting used to driving a car that doesn't have a fifth gear, has a manual choke, and rattles when it does above 60mph!
I've had the whole Easter weekend off work, and it seem like absolutely ages! Probably because I've managed to get a lot done with the house. Jamie came round on Friday and Saturday to help with doing some DIY stuff, and I'd have got nowhere near as much done if he hadn't been here! We basically did some work on my dining room, and bricked in the old fireplace, boxed in all the pipes, moved the ceiling light so it's now over the table, installed some spotlights, and added some extra plug sockets in there! The only hiccup was when we added the extra mains sockets – it looked like there was an old spur cable of the socket we wanted to link from – and we checked all over to make sure it wasn't going anywhere, so we just cut that and used it for the new one. Brilliant… until the next morning when I went to run some hot water for a wash… and no hot water! The realisation soon kicked in that that cable that seemed to make no difference whether connected or not was actually powering the boiler for my central heating!! I left it until the this morning to fix because I went for lunch yesterday with Jamie and Ryan, and didn't get home until pretty late. So I got the boiler working again this afternoon, and have now also built a new bottom step for my stairs, after taking out the old one because it was far too big, and the wood on it had split anyway. So I got loads done on the room, and it's not too far off getting someone in to plaster it all… then it's just the finishing touches!
The only other thing I've done this weekend is that I went to see The Passion Of The Christ yesterday morning. I know it's been out for a while, but it been the first chance I've had to see it. I wasn't quite sure what to expect because of all the hype around it – but I wanted to make up my own mind about the film. I guess was suprised at how much the fact it was subtitled throughout didn't bother me at all, and visually it was stunning. There were one or two bits that I thought weren't quite right, but have made me think about stuff. And the portrayal of the violence wasn't as bad as I thought it might be. I guess that's more of a reflection of how we become desensitized to things nowadays, but I think it was more that the violent stuff was pretty much never-ending, so I guess the shock is the amount of it rather than the level of it as far as I was concerned. But all in all, I thought it was a really good film.
Went over to Jamie's in Sheffield yesterday to watch the final Lord of The Rings film – and it's excellent! At three and a half hours, it's quite a long time to sit in the cinema – the advantage of the DVD versions are that you can take a bit of a break when you change the discs over! But it was really good, and I was surprised that the the cinema was packed, considering it was Boxing Day!
It's been great having a few days off work, and I've still got tomorrow before I go back… it's been ages since I've had a few days off together! Hopefully I'll be able to get all my work finished on Monday and Tuesday, so I can take New Year's Eve off to pack for our skiing trip which starts the next day! I can't believe that this time next week I'll be in Switzerland!!


Josh Rosebrook Nutrient Day Cream SPF 30 is adual-action day cream which performs as a regenerating moisturizer and natural, broad spectrum sunscreen. The Nutrient Day Cream delivers a potent combination of distinct herbal actives and plant oils to repair, moisturize and protect skin. Unique herbal synergies release skin transforming anti inflammatories, antioxidants, fatty acids and phytonutrients proven to firm, reduce redness, and assist the skin in regeneration. This luxurious, lightweight cream finishes matte, smooth and comfortable without a white cast. We've chosen a high quality uncoated, non nano, high micron zinc oxide to provide effective sunblock against skin damaging solar rays.
Rose Hips brightens, soothes, firms, reduces dark/age spots, repairs cells.
Nettles treats acne, calms, brightens, repairs cells.
For best results apply 2 - 3 pumps immediately after misting Josh Rosebrook Hydrating Accelerator.
Avoid rubbing or touching the face while perspiration is present, it can wipe the product off the face.
*Aloe Vera Leaf Juice, *Shea Butter, *Evening Primrose Oil, *Hemp Seed Oil, *Jojoba Oil, *Borage Seed Oil, *Almond Oil, *Grape Seed Oil, *Sesame Oil, *Avocado Oil, *Olive Oil, *Sea Buckthorn Oil, *Broccoli Oil, *Calendula, *Bilberry, *Chamomile, *Burdock, *Rosemary, *Fennel, *Dandelion, *Rose Hips, *Catnip, *Chickweed, *Neem, *Skullcap, *Ginkgo Leaf, *Linden Flower, *Hawthorn Berry, *Green Tea, *Flax, *Nettle, *Sage, *Marshmallow Root, *Cayenne, *Ginseng, *Peppermint, *St. John's Wort, *Alfalfa, *Vitamin E, ‡Candelilla Wax, *Guar Gum, *Gum Arabic, §Xanthan Gum, §Potassium Sorbate, *Benzoin Resin, †Carrot Seed Oil.


Find the best deals at the lowest prices with our Qwik Park promo codes and deals.
Still Searching Codes in Qwik Park?
How to Apply Coupon Codes at qwikpark.com?
Then, you will see the discount price with Qwik Park.
Enjoy the up-to-date Qwik Park Promo Codes and deals for instant Discounts when you shop at Qwik Park. Grab your opportunity to save with each Qwik Park promo code or coupon. You can get up to 15% Off savings by using our 9 fantastic Qwik Park promos. Be sure to check all of our Qwik Park Coupons and deals first before you make your order to make sure that you are getting the best savings. Grab your Qwik Park Coupon Codes and save your hard earned dollars now!
1.Ways for saving money are various. There are the different types of methods on which you can save money at Qwik Park store.
4.You can Subscribe to for a qwikpark.com membership to avail various Coupons and save money.
5.Qwik Park supports a large deal of exclusive savings as long as you make an order of certain sections.
6.You can't miss the chance to get better promotions if purchasing whatever you like online at Qwik Park.
7.Enjoy the opportunity of the free trial service on the items you'd like to pay for before making a decision.
What is today's top offer for Qwik Park?
Today's top offer is 'Detroit Airport Parking Online Special Rates as Low as $10 Day'. Go to shop at qwikpark.com.


It's road trip time! We happened to get our paws on some tickets and hotel accommodations to The Food Network Southern Food & Wine Festival at Gaylord Opryland in Nashville, TN. So enter our "Photo Caption This" contest here on FNDish.com, and get together a road trip for July 31/August 1 (or if you live in or around Nashville, TN then you're already good to go)!
Take a long, hard look at the picture above. Write an original and creative photo caption for the image, and enter it in the comments section of this post. A little humor doesn't hurt either! We'll pick one (1) winner next Thursday, July 23 ( at which point we'll ask you to fill out an entry form). You are eligible if you: a) can travel to Nashville, TN on either July 31st or August 1st AND b) are 21 years of age or older. (See full contest rules here).
Two (2) tickets to the festival exhibit hall featuring food and wine vendors, food samplings, cooking competitions, kids' area, wine tastings and more!
By submitting a comment on this post you agree to these contest rules.


We are proud to present a new website of our beloved Laboratory.
Although we all loved (the status quo of) our previous website, it's been the same for almost 10 years. The new website (found at http://musiclab.si and http://lgm.fri.uni-lj.si) is now finally up-to-date with our newest projects, publications and research interests.


text:
Universal Principles of Branding
Mark Kingsley
Universal Principles of Branding presents 100 concepts, theories, and guidelines that are critical for defining, building, and delivering brands today.
Richly illustrated and easy to navigate, this comprehensive reference pairs clear explanations of each principle with visual examples of it applied in practice. By considering these concepts and examples, you can learn to make more informed, and ultimately better, branding decisions.
Featured principles are as diverse as:
Rituals and routine
Each principle is presented in a two-page format. The left-hand page contains a succinct definition, a full description of the principle, examples of its use, and guidelines for use. Sidenotes appear to the right of the text, and provide elaborations and references. The right-hand page contains visual examples and related graphics to support a deeper understanding of the principle.
The titles in the Rockport Universal series offer comprehensive and authoritative information and edifying and inspiring visual examples on multidisciplinary subjects for designers, architects, engineers, students, and anyone who is interested in expanding and enriching their design knowledge.
PRICE: $40.00 / Can$53.00 / £28.00
SERIES: Rockport Universal
SIZE: 8.5 in x 10in / 215.9mm x 254 mm
Mark Kingsley is a creative director and strategist with a wide range of experience and recognition. He is a faculty member in the School of Visual Arts Masters in Branding program and currently holds the endowed Melbert B. Cary Professorship in Graphic Arts at the Rochester Institute of Technology. As Executive Strategy Director at Collins, he developed the new global positioning for Ogilvy and helped Equinox enter the luxury hotel business. For over 17 years, his studio Greenberg Kingsley specialized in music and arts, including several years of branding and advertising for Central Park SummerStage; work for the Guggenheim Museum store; and music packaging for John Coltrane, Pat Metheny, and Quincy Jones. His current studio, Malcontent, serves global advertising firms, fin-tech startups, arts organizations, living legends, and Pulitzer Prize winners.
A Practical Guide to Creating Effective Signs, Symbols, and Icons
Principles of Logo Design
125 Ways to Research Complex Problems, Develop Innovative Ideas, and Design Effective Solutions
The Pocket Universal Methods of Design, Revised and Expanded
Graphic approaches, solutions, and inspiration + 30 case studies
Information Design Workbook, Revised and Updated
1,500 Plus Color Palettes for Designers, Artists, Architects, Makers, and Educators
The Pocket Complete Color Harmony
Understanding the rules and knowing when to break them - A Visual Communication Manual
Design Elements, Third Edition
Universal Methods of Design, Expanded and Revised
$80.00 / Can$104.00 / £65.00
The One Show, Volume 40
100 Principles for Building Brands
Brand Identity Essentials, Revised and Expanded
The Definitive Guide to Visual Branding
Identity Designed
100 Design Principles for Working with Type
Typography Essentials Revised and Updated
An illustrated handbook for understanding fundamental design principles
The Language of Graphic Design Revised and Updated
Typeface Design from Past to Future
Letterforms
A real-world guide to building pages in graphic design
Layout Workbook: Revised and Updated
A Practical Guide for Students and Designers
Design School: Layout
Everything Interior Designers Need to Know Every Day
The Interior Design Reference & Specification Book updated & revised
The Pocket Universal Methods of Design
Design School: Type
Designing and Creating Effective Visual Symbols
Thinking in Icons
A Graphic Design Layout Workshop
Making and Breaking the Grid, Second Edition, Updated and Expanded


text:
Graeme Shinnie won't find Aberdeen adulation anywhere else insists Derek McInnes
The Dons skipper is out of contract at the end of the season and is yet to agree a new deal.
Craig Swan
(Image: SNS Group)
Graeme Shinnie can get the loot. But he'll never get the same love.
Derek McInnes is fully aware the "heartbeat" of Aberdeen can walk away for a fresh challenge and bigger financial package at the end of the season.
Shinnie is free to sign a pre-contract now with another club.
But, no matter what can offered elsewhere in terms of intrigue and money, McInnes is adamant it'll never match the admiration, adulation and appreciation he gets in the Granite City.
Aberdeen's Graeme Shinnie dons a the Rainbow Captains Armband (Image: SNS Group)
Joy for Aberdeen as Derek McInnes and Sam Cosgrove scoop awards double
In four years with the Reds since signing from Inverness Caley Thistle, Shinnie has become an emblem of the club.
The 27-year-old is a figurehead of the Dons. Club captain, often best player and always a stalwart, the Scotland squad star is on a pedestal at Pittodrie amongst the supporters and his peers.
McInnes hopes it could prove a decisive factor in convincing his on-field leader to stay as he said: "Shinnie won't get the status he's got here with anybody else.
"He's so relevant to our club, his association with the club and the team. He's the heartbeat of my team.
"The bond with the supporters doesn't always come, but he's got that. You won't always get that and I'm sure he sees that. He's a smart boy and I just hope he makes the right decision.
(Image: SNS)
"We are on the border of the richest league in the world. We lose players to The Championship, loan players might go back to Premier League clubs or whatever, and obviously we've lost Jonny [Hayes] and Niall [McGinn] for the money, Ryan [Jack] goes to Rangers.
"So, within every good team, there are always good players within it and they are the ones where, a lot of the time when recognition comes for them, it can feel like a threat.
"It's our job to try to get those performances out of them and get more consistency from them, but every time they perform and everyone recognises how good they are it makes us more vulnerable to losing them.
"That's just the way it is. Unless somebody on the board increases the budget tenfold, we're not going to be able to deal with that side of it all the time."
As McInnes says, it's a tough job constantly losing the best players.
With Shinnie assessing his options, Gary Mackay-Steven has an opportunity in the MLS with New York City, while progressing Scott McKenna will, no doubt, be the subject of some more big offers.
Aberdeen were able to bat away interest from Celtic and England during the last transfer window as they fought to hang onto their prized defender.
However, with almost three more weeks of this window to go, the stopper may again be bid for before the end of the month.
McInnes is already bracing himself for it, but is adamant he doesn't want anyone to quit until at least the end of the term as his team fight in the title race and hunt Scottish Cup glory.
He said: "I would be pretty sure there will be some activity about McKenna and some phone calls about him.
"I've already had a couple to be honest, but nothing has materialised.
"We have got to where we are after 21 league games, we've got to a Cup Final this season already and I want to go with the strength of the team at the minute and not lose anybody.
"With injured players coming back, I think we can be stronger again in the second half of the season and, hopefully, add to the squad.
"I'm wanting all my players, my key players like McKenna especially to be with us for the full season.
"Only money can change that. It's up to other clubs to come in. Hopefully, nobody comes in, but it can change pretty quickly. "If somebody's in desperation and in need they will pay the money, so we'll see.
Scott Brown speaks with Aberdeen's Scott McKenna (Image: SNS Group)
"The ideal scenario would be if we had to sell him in January that we would get him back on loan, but that's not something we're actively trying to promote.
"I think he [McKenna] has coped with everything that's come his way. He is getting better, getting better in an Aberdeen shirt, getting better in a Scotland shirt.
"Wherever he goes next, I think he will keep getting better and move on again."
As usual for McInnes and other managers in the Scottish Premiership, it'll be an anxious wait until the window closes.
Nonetheless, the Dons boss knows the strength of what he's got going at Pittodrie is also a lure for any player.
While clubs will have to pay for McKenna, it's the ability of others to take the likes of Shinnie and Mackay-Steven at the end of contracts which is the unavoidable concern.
Yet he will never give up of keeping them as McInnes isn't interested in what could be on offer for them elsewhere. Only what he and his club can offer.
He said: "Who knows? I think both boys [Shinnie and GMS] will have options, whether it's domestically, abroad or in England I don't know.
"But I do know we are a strong option for them and I live in hope that both boys see the importance of staying."
Who will win the Scottish Premiership this season?
59000+ VOTES SO FAR
Graeme Shinnie
Gary Mackay-Steven
Scott McKenna