You can play Lost Outpost free online shooting games at bullgames.net. It has 311 total plays and has been rated 80/100(from 93 ratings), (93 like and 0 dislike), find the fun and happy day. If you want to play more shooting games, we find some of the game: Lost Race, Lost Head, Mystery Case - The Lost Child and Lost Cabin. To play other games, go to the action games or adventure games page.
Play Lost Outpost online games, Fun and Happy.


text:
Der Klammsee ist ein Stausee und liegt auf dem Gemeindegebiet von Kaprun im Bundesland Salzburg in Österreich.

Der Klammsee ist ein Tagesspeicher mit einem Volumen von 200.000 m³ und Teil des Kraftwerks Kaprun. Die Staumauer Bürgsperre mit einer Höhe von 19 m staut die Kapruner Ache und sammelt Wasser des Kapruner Tales, das nicht in der Hauptstufe des Kraftwerks erfasst wird. Die Inbetriebnahme erfolgte 1947.

Unterhalb der Sperre liegt die Sigmund-Thun-Klamm.

Siehe auch
 Liste der Stauseen in Österreich

Weblinks

Stausee in Europa
Stausee in Österreich
See im Land Salzburg
Staumauer in Österreich
Wasserspeicherkraftwerk in Österreich
Gewässer im Bezirk Zell am See
Bauwerk in Kaprun
SKlammsee
Geographie (Kaprun)
Stausee Klammsee
Erbaut in den 1940er Jahren
Wasserspeicherkraftwerk in Europa
Kraftwerk im Land Salzburg
Stausee in den Alpen
Wirtschaft (Alpen)

redpajama_set_name: RedPajamaWikipedia


text:
"""
Mappers to provide input data for the graph models in layers.

"""
__all__ = [
    "GraphSAGENodeGenerator",
    "HinSAGENodeGenerator",
    "Attri2VecNodeGenerator",
    "Node2VecNodeGenerator",
    "DirectedGraphSAGENodeGenerator",
]

import warnings
import operator
import random
import abc
import warnings
import numpy as np
import itertools as it
import networkx as nx
import scipy.sparse as sps
from tensorflow.keras import backend as K
from functools import reduce
from tensorflow.keras.utils import Sequence
from collections import defaultdict

from ..data import (
    SampledBreadthFirstWalk,
    SampledHeterogeneousBreadthFirstWalk,
    DirectedBreadthFirstNeighbours,
)
from ..core.graph import StellarGraph, GraphSchema
from ..core.utils import is_real_iterable
from ..core.validation import comma_sep
from . import NodeSequence, Generator
from ..random import SeededPerBatch

class BatchedNodeGenerator(Generator):
    """
    Abstract base class for graph data generators.

    The supplied graph should be a StellarGraph object that is ready for
    machine learning.

    Do not use this base class: use a subclass specific to the method.

    Args:
        G (StellarGraph): The machine-learning ready graph.
        batch_size (int): Size of batch to return.
        schema (GraphSchema): [Optional] Schema for the graph, for heterogeneous graphs.
    """

    def __init__(self, G, batch_size, schema=None, use_node_features=True):
        if not isinstance(G, StellarGraph):
            raise TypeError("Graph must be a StellarGraph or StellarDiGraph object.")

        self.graph = G
        self.batch_size = batch_size

        # This is a node generator and requries a model with one root nodes per query
        self.multiplicity = 1

        # We need a schema for compatibility with HinSAGE
        if schema is None:
            self.schema = G.create_graph_schema()
        elif isinstance(schema, GraphSchema):
            self.schema = schema
        else:
            raise TypeError("Schema must be a GraphSchema object")

        # We will need real node types here
        self.head_node_types = None

        # Create sampler for GraphSAGE
        self.sampler = None

        # Check if the graph has features
        if use_node_features:
            G.check_graph_for_ml()

    @abc.abstractmethod
    def sample_features(self, head_nodes, batch_num):
        pass

    def num_batch_dims(self):
        return 1

    def flow(self, node_ids, targets=None, shuffle=False, seed=None):
        """
        Creates a generator/sequence object for training or evaluation
        with the supplied node ids and numeric targets.

        The node IDs are the nodes to train or inference on: the embeddings
        calculated for these nodes are passed to the downstream task. These
        are a subset of the nodes in the graph.

        The targets are an array of numeric targets corresponding to the
        supplied node_ids to be used by the downstream task. They should
        be given in the same order as the list of node IDs.
        If they are not specified (for example, for use in prediction),
        the targets will not be available to the downstream task.

        Note that the shuffle argument should be True for training and
        False for prediction.

        Args:
            node_ids: an iterable of node IDs
            targets: a 2D array of numeric targets with shape
                ``(len(node_ids), target_size)``
            shuffle (bool): If True the node_ids will be shuffled at each
                epoch, if False the node_ids will be processed in order.

        Returns:
            A NodeSequence object to use with with StellarGraph models
            in Keras methods ``fit``, ``evaluate``,
            and ``predict``

        """
        if self.head_node_types is not None:
            expected_node_type = self.head_node_types[0]
        else:
            expected_node_type = None

        node_ilocs = self.graph.node_ids_to_ilocs(node_ids)
        node_types = self.graph.node_type(node_ilocs, use_ilocs=True)
        invalid = node_ilocs[node_types != expected_node_type]

        if len(invalid) > 0:
            raise ValueError(
                f"node_ids: expected all nodes to be of type {expected_node_type}, "
                f"found some nodes with wrong type: {comma_sep(invalid, stringify=format)}"
            )

        return NodeSequence(
            self.sample_features,
            self.batch_size,
            node_ilocs,
            targets,
            shuffle=shuffle,
            seed=seed,
        )

    def flow_from_dataframe(self, node_targets, shuffle=False):
        """
        Creates a generator/sequence object for training or evaluation
        with the supplied node ids and numeric targets.

        Args:
            node_targets: a Pandas DataFrame of numeric targets indexed
                by the node ID for that target.
            shuffle (bool): If True the node_ids will be shuffled at each
                epoch, if False the node_ids will be processed in order.

        Returns:
            A NodeSequence object to use with with StellarGraph models
            in Keras methods ``fit``, ``evaluate``,
            and ``predict``

        """
        return self.flow(node_targets.index, node_targets.values, shuffle=shuffle)

class GraphSAGENodeGenerator(BatchedNodeGenerator):
    """
    A data generator for node prediction with Homogeneous GraphSAGE models

    At minimum, supply the StellarGraph, the batch size, and the number of
    node samples for each layer of the GraphSAGE model.

    The supplied graph should be a StellarGraph object with node features.

    Use the :meth:`flow` method supplying the nodes and (optionally) targets
    to get an object that can be used as a Keras data generator.

    Example::

        G_generator = GraphSAGENodeGenerator(G, 50, [10,10])
        train_data_gen = G_generator.flow(train_node_ids, train_node_labels)
        test_data_gen = G_generator.flow(test_node_ids)

    .. seealso::

       Model using this generator: :class:`.GraphSAGE`.

       Some examples using this generator (see the model for more):

       - `node classification <https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage-node-classification.html>`__
       - `unsupervised representation learning via Deep Graph Infomax <https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-embeddings.html>`__

       Related functionality:

       - :class:`.Neo4jGraphSAGENodeGenerator` for using :class:`.GraphSAGE` with Neo4j
       - :class:`.CorruptedGenerator` for unsupervised training using :class:`.DeepGraphInfomax`
       - :class:`.GraphSAGELinkGenerator` for link prediction, unsupervised training using random walks and related tasks
       - :class:`.DirectedGraphSAGENodeGenerator` for directed graphs
       - :class:`.HinSAGENodeGenerator` for heterogeneous graphs

    Args:
        G (StellarGraph): The machine-learning ready graph.
        batch_size (int): Size of batch to return.
        num_samples (list): The number of samples per layer (hop) to take.
        seed (int): [Optional] Random seed for the node sampler.
        weighted (bool, optional): If True, sample neighbours using the edge weights in the graph.
    """

    def __init__(
        self, G, batch_size, num_samples, seed=None, name=None, weighted=False
    ):
        super().__init__(G, batch_size)

        self.num_samples = num_samples
        self.head_node_types = self.schema.node_types
        self.name = name
        self.weighted = weighted

        # Check that there is only a single node type for GraphSAGE
        if len(self.head_node_types) > 1:
            warnings.warn(
                "running homogeneous GraphSAGE on a graph with multiple node types",
                RuntimeWarning,
                stacklevel=2,
            )

        # Create sampler for GraphSAGE
        self._samplers = SeededPerBatch(
            lambda s: SampledBreadthFirstWalk(G, graph_schema=self.schema, seed=s),
            seed=seed,
        )

    def sample_features(self, head_nodes, batch_num):
        """
        Sample neighbours recursively from the head nodes, collect the features of the
        sampled nodes, and return these as a list of feature arrays for the GraphSAGE
        algorithm.

        Args:
            head_nodes: An iterable of head nodes to perform sampling on.
            batch_num (int): Batch number

        Returns:
            A list of the same length as ``num_samples`` of collected features from
            the sampled nodes of shape:
            ``(len(head_nodes), num_sampled_at_layer, feature_size)``
            where ``num_sampled_at_layer`` is the cumulative product of ``num_samples``
            for that layer.
        """
        node_samples = self._samplers[batch_num].run(
            nodes=head_nodes, n=1, n_size=self.num_samples, weighted=self.weighted
        )

        # The number of samples for each head node (not including itself)
        num_full_samples = np.sum(np.cumprod(self.num_samples))

        # Reshape node samples to sensible format
        def get_levels(loc, lsize, samples_per_hop, walks):
            end_loc = loc + lsize
            walks_at_level = list(it.chain(*[w[loc:end_loc] for w in walks]))
            if len(samples_per_hop) < 1:
                return [walks_at_level]
            return [walks_at_level] + get_levels(
                end_loc, lsize * samples_per_hop[0], samples_per_hop[1:], walks
            )

        nodes_per_hop = get_levels(0, 1, self.num_samples, node_samples)
        node_type = self.head_node_types[0]

        # Get features for sampled nodes
        batch_feats = [
            self.graph.node_features(layer_nodes, node_type, use_ilocs=True)
            for layer_nodes in nodes_per_hop
        ]

        # Resize features to (batch_size, n_neighbours, feature_size)
        batch_feats = [
            np.reshape(a, (len(head_nodes), -1 if np.size(a) > 0 else 0, a.shape[1]))
            for a in batch_feats
        ]
        return batch_feats

    def default_corrupt_input_index_groups(self):
        # everything can be shuffled together
        return [list(range(len(self.num_samples) + 1))]

class DirectedGraphSAGENodeGenerator(BatchedNodeGenerator):
    """
    A data generator for node prediction with homogeneous GraphSAGE models
    on directed graphs.

    At minimum, supply the StellarDiGraph, the batch size, and the number of
    node samples (separately for in-nodes and out-nodes)
    for each layer of the GraphSAGE model.

    The supplied graph should be a StellarDiGraph object with node features.

    Use the :meth:`flow` method supplying the nodes and (optionally) targets
    to get an object that can be used as a Keras data generator.

    Example::

        G_generator = DirectedGraphSAGENodeGenerator(G, 50, [10,5], [5,1])
        train_data_gen = G_generator.flow(train_node_ids, train_node_labels)
        test_data_gen = G_generator.flow(test_node_ids)

    .. seealso::

       Model using this generator: :class:`.DirectedGraphSAGE`.

       Example using this generator: `node classification <https://stellargraph.readthedocs.io/en/stable/demos/node-classification/directed-graphsage-node-classification.html>`__.

       Related functionality:

       - :class:`.Neo4jDirectedGraphSAGENodeGenerator` for using :class:`.DirectedGraphSAGE` with Neo4j
       - :class:`.CorruptedGenerator` for unsupervised training using :class:`.DeepGraphInfomax`
       - :class:`.DirectedGraphSAGELinkGenerator` for link prediction and related tasks
       - :class:`.GraphSAGENodeGenerator` for undirected graphs
       - :class:`.HinSAGENodeGenerator` for heterogeneous graphs

    Args:
        G (StellarDiGraph): The machine-learning ready graph.
        batch_size (int): Size of batch to return.
        in_samples (list): The number of in-node samples per layer (hop) to take.
        out_samples (list): The number of out-node samples per layer (hop) to take.
        seed (int): [Optional] Random seed for the node sampler.
        weighted (bool, optional): If True, sample neighbours using the edge weights in the graph.
    """

    def __init__(
        self,
        G,
        batch_size,
        in_samples,
        out_samples,
        seed=None,
        name=None,
        weighted=False,
    ):
        super().__init__(G, batch_size)

        # TODO Add checks for in- and out-nodes sizes
        self.in_samples = in_samples
        self.out_samples = out_samples
        self.head_node_types = self.schema.node_types
        self.name = name
        self.weighted = weighted

        # Check that there is only a single node type for GraphSAGE
        if len(self.head_node_types) > 1:
            warnings.warn(
                "running homogeneous GraphSAGE on a graph with multiple node types",
                RuntimeWarning,
                stacklevel=2,
            )

        # Create sampler for GraphSAGE
        self.sampler = DirectedBreadthFirstNeighbours(
            G, graph_schema=self.schema, seed=seed
        )

    def _max_slots(self):
        max_hops = len(self.in_samples)
        return 2 ** (max_hops + 1) - 1

    def sample_features(self, head_nodes, batch_num):
        """
        Sample neighbours recursively from the head nodes, collect the features of the
        sampled nodes, and return these as a list of feature arrays for the GraphSAGE
        algorithm.

        Args:
            head_nodes: An iterable of head nodes to perform sampling on.
            batch_num (int): Batch number

        Returns:
            A list of feature tensors from the sampled nodes at each layer, each of shape:
            ``(len(head_nodes), num_sampled_at_layer, feature_size)``
            where ``num_sampled_at_layer`` is the total number (cumulative product)
            of nodes sampled at the given number of hops from each head node,
            given the sequence of in/out directions.
        """
        node_samples = self.sampler.run(
            nodes=head_nodes,
            n=1,
            in_size=self.in_samples,
            out_size=self.out_samples,
            weighted=self.weighted,
        )

        # Reshape node samples to sensible format
        # Each 'slot' represents the list of nodes sampled from some neighbourhood, and will have a corresponding
        # NN input layer. Every hop potentially generates both in-nodes and out-nodes, held separately,
        # and thus the slot (or directed hop sequence) structure forms a binary tree.

        node_type = self.head_node_types[0]

        max_slots = self._max_slots()
        features = [None] * max_slots  # flattened binary tree

        for slot in range(max_slots):
            nodes_in_slot = list(it.chain(*[sample[slot] for sample in node_samples]))
            features_for_slot = self.graph.node_features(
                nodes_in_slot, node_type, use_ilocs=True
            )
            resize = -1 if np.size(features_for_slot) > 0 else 0
            features[slot] = np.reshape(
                features_for_slot, (len(head_nodes), resize, features_for_slot.shape[1])
            )

        return features

    def default_corrupt_input_index_groups(self):
        # everything can be shuffled together
        return [list(range(self._max_slots()))]

class HinSAGENodeGenerator(BatchedNodeGenerator):
    """Keras-compatible data mapper for Heterogeneous GraphSAGE (HinSAGE)

    At minimum, supply the StellarGraph, the batch size, and the number of
    node samples for each layer of the HinSAGE model.

    The supplied graph should be a StellarGraph object with node features for all node types.

    Use the :meth:`flow` method supplying the nodes and (optionally) targets
    to get an object that can be used as a Keras data generator.

    Note that the shuffle argument should be True for training and
    False for prediction.

    .. seealso::

       Model using this generator: :class:`.HinSAGE`.

       Example using this generator: `unsupervised representation learning via Deep Graph Infomax <https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-embeddings.html>`_.

       Related functionality:

       - :class:`.CorruptedGenerator` for unsupervised training using :class:`.DeepGraphInfomax`
       - :class:`.HinSAGELinkGenerator` for link prediction and related tasks
       - :class:`.GraphSAGENodeGenerator` for homogeneous graphs
       - :class:`.DirectedGraphSAGENodeGenerator` for directed homogeneous graphs

    Args:
        G (StellarGraph): The machine-learning ready graph
        batch_size (int): Size of batch to return
        num_samples (list): The number of samples per layer (hop) to take
        head_node_type (str, optional): The node type that will be given to the generator using the
            `flow` method, the model will expect this node type. This does not need to be specified
            if ``G`` has only one node type.
        schema (GraphSchema, optional): Graph schema for G.
        seed (int, optional): Random seed for the node sampler

    Example::

         G_generator = HinSAGENodeGenerator(G, 50, [10,10])
         train_data_gen = G_generator.flow(train_node_ids, train_node_labels)
         test_data_gen = G_generator.flow(test_node_ids)

     """

    def __init__(
        self,
        G,
        batch_size,
        num_samples,
        head_node_type=None,
        schema=None,
        seed=None,
        name=None,
    ):
        super().__init__(G, batch_size, schema=schema)

        self.num_samples = num_samples
        self.name = name

        # The head node type
        if head_node_type is None:
            # infer the head node type, if this is a homogeneous-node graph
            head_node_type = G.unique_node_type(
                "head_node_type: expected a head node type because G has more than one node type, found node types: %(found)s"
            )

        if head_node_type not in self.schema.node_types:
            raise KeyError("Supplied head node type must exist in the graph")
        self.head_node_types = [head_node_type]

        # Create sampling schema
        self._sampling_schema = self.schema.sampling_layout(
            self.head_node_types, self.num_samples
        )
        self._type_adjacency_list = self.schema.type_adjacency_list(
            self.head_node_types, len(self.num_samples)
        )

        # Create sampler for HinSAGE
        self.sampler = SampledHeterogeneousBreadthFirstWalk(
            G, graph_schema=self.schema, seed=seed
        )

    def sample_features(self, head_nodes, batch_num):
        """
        Sample neighbours recursively from the head nodes, collect the features of the
        sampled nodes, and return these as a list of feature arrays for the GraphSAGE
        algorithm.

        Args:
            head_nodes: An iterable of head nodes to perform sampling on.
            batch_num (int): Batch number

        Returns:
            A list of the same length as ``num_samples`` of collected features from
            the sampled nodes of shape:
            ``(len(head_nodes), num_sampled_at_layer, feature_size)``
            where ``num_sampled_at_layer`` is the cumulative product of ``num_samples``
            for that layer.
        """
        # Get sampled nodes
        node_samples = self.sampler.run(nodes=head_nodes, n=1, n_size=self.num_samples)

        # Reshape node samples to the required format for the HinSAGE model
        # This requires grouping the sampled nodes by edge type and in order
        nodes_by_type = [
            (
                nt,
                reduce(
                    operator.concat,
                    (samples[ks] for samples in node_samples for ks in indices),
                    [],
                ),
            )
            for nt, indices in self._sampling_schema[0]
        ]

        # Get features
        batch_feats = [
            self.graph.node_features(layer_nodes, nt, use_ilocs=True)
            for nt, layer_nodes in nodes_by_type
        ]

        # Resize features to (batch_size, n_neighbours, feature_size)
        batch_feats = [
            np.reshape(a, (len(head_nodes), -1 if np.size(a) > 0 else 0, a.shape[1]))
            for a in batch_feats
        ]

        return batch_feats

    def default_corrupt_input_index_groups(self):
        # every sample of a given node type can be grouped together
        indices_per_nt = defaultdict(list)
        for tensor_idx, (nt, _) in enumerate(self._sampling_schema[0]):
            indices_per_nt[nt].append(tensor_idx)

        # ensure there's a consistent order both within each group, and across groups, ensure the
        # shuffling is deterministic (at least with respect to the model)
        return sorted(sorted(idx) for idx in indices_per_nt.values())

class Attri2VecNodeGenerator(BatchedNodeGenerator):
    """
    A node feature generator for node representation prediction with the
    attri2vec model.

    At minimum, supply the StellarGraph and the batch size.

    The supplied graph should be a StellarGraph object with node features.

    Use the :meth:`flow` method supplying the nodes to get an object
    that can be used as a Keras data generator.

    Example::

        G_generator = Attri2VecNodeGenerator(G, 50)
        data_gen = G_generator.flow(node_ids)

    .. seealso::

       Model using this generator: :class:`.Attri2Vec`.

       An example using this generator (see the model for more): `node classification <https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec-node-classification.html>`__.

       Related functionality: :class:`.Attri2VecLinkGenerator` for training, link prediction and related tasks.

    Args:
        G (StellarGraph): The machine-learning ready graph.
        batch_size (int): Size of batch to return.
        name (str or None): Name of the generator (optional).
    """

    def __init__(self, G, batch_size, name=None):
        super().__init__(G, batch_size)
        self.name = name

    def sample_features(self, head_nodes, batch_num):
        """
        Sample content features of the head nodes, and return these as a list of feature
        arrays for the attri2vec algorithm.

        Args:
            head_nodes: An iterable of head nodes to perform sampling on.
            batch_num (int): Batch number

        Returns:
            A list of feature arrays, with each element being the feature of a
            head node.
        """

        batch_feats = self.graph.node_features(head_nodes, use_ilocs=True)
        return batch_feats

    def flow(self, node_ids):
        """
        Creates a generator/sequence object for node representation prediction
        with the supplied node ids.

        The node IDs are the nodes to inference on: the embeddings
        calculated for these nodes are passed to the downstream task. These
        are a subset/all of the nodes in the graph.

        Args:
            node_ids: an iterable of node IDs.

        Returns:
            A NodeSequence object to use with the Attri2Vec model
            in the Keras method ``predict``.

        """
        node_ilocs = self.graph.node_ids_to_ilocs(node_ids)
        return NodeSequence(
            self.sample_features, self.batch_size, node_ilocs, shuffle=False
        )

    def flow_from_dataframe(self, node_ids):
        """
        Creates a generator/sequence object for node representation prediction
        by using the index of the supplied dataframe as the node ids.

        Args:
            node_ids: a Pandas DataFrame of node_ids.

        Returns:
            A NodeSequence object to use with the Attri2Vec model
            in the Keras method ``predict``.

        """
        node_ilocs = self.graph.node_ids_to_ilocs(node_ids.index)
        return NodeSequence(
            self.sample_features, self.batch_size, node_ilocs, shuffle=False
        )

class Node2VecNodeGenerator(BatchedNodeGenerator):
    """
    A data generator for node representation prediction with Node2Vec models.

    At minimum, supply the StellarGraph and the batch size.

    The supplied graph should be a StellarGraph object that is ready for
    machine learning. Currently the model does not require node features for
    nodes in the graph.

    Use the :meth:`flow` method supplying the nodes to get an object
    that can be used as a Keras data generator.

    Example::

        G_generator = Node2VecNodeGenerator(G, 50)
        data_gen = G_generator.flow(node_ids)

    .. seealso::

       Model using this generator: :class:`.Node2Vec`.

       An example using this generator (see the model for more): `unsupervised representation learning <https://stellargraph.readthedocs.io/en/stable/demos/embeddings/keras-node2vec-embeddings.html>`_.

       Related functionality: :class:`.Node2VecLinkGenerator` for training, link prediction, and related tasks.

    Args:
        G (StellarGraph): The machine-learning ready graph.
        batch_size (int): Size of batch to return.
        name (str or None): Name of the generator (optional).
    """

    def __init__(self, G, batch_size, name=None):
        super().__init__(G, batch_size, use_node_features=False)
        self.name = name

    def sample_features(self, head_nodes, batch_num):
        """
        Get the ids of the head nodes, and return these as a list of feature
        arrays for the Node2Vec algorithm.

        Args:
            head_nodes: An iterable of head nodes to perform sampling on.

        Returns:
            A list of feature arrays, with each element being the id of each
            head node.
        """

        return np.array(head_nodes)

    def flow(self, node_ids):
        """
        Creates a generator/sequence object for node representation prediction
        with the supplied node ids. This should be used with a trained ``Node2Vec``
        model in order to transform node ids to node embeddings. For training,
        see ``Node2VecLinkGenerator`` instead.

        The node IDs are the nodes to inference on: the embeddings
        calculated for these nodes are passed to the downstream task. These
        are a subset/all of the nodes in the graph.

        Args:
            node_ids: an iterable of node IDs.

        Returns:
            A NodeSequence object to use with the Node2Vec model
            in the Keras method ``predict``.
        """
        node_ilocs = self.graph.node_ids_to_ilocs(node_ids)
        return NodeSequence(
            self.sample_features, self.batch_size, node_ilocs, shuffle=False
        )

    def flow_from_dataframe(self, node_ids):
        """
        Creates a generator/sequence object for node representation prediction
        by using the index of the supplied dataframe as the node ids.

        Args:
            node_ids: a Pandas DataFrame of node_ids.

        Returns:
            A NodeSequence object to use with the Node2Vec model
            in the Keras method ``predict``.
        """
        node_ilocs = self.graph.node_ids_to_ilocs(node_ids.index)
        return NodeSequence(
            self.sample_features, self.batch_size, node_ilocs, shuffle=False
        )

redpajama_set_name: RedPajamaGithub


Without inbound links your site can rank high(top in my case) only if it is new and enjoying google's "HONEYMOON PERIOD". After that it will be thrown in sandbox. This is exactly what happened to my 3 months old site.
Without inbound links your site can rank high(top in my case) only if it is new and enjoying google's "HONEYMOON PERIOD". After that it will be thrown in sandbox. This is exactly what happened to my 3 months old site.
Ok, I am scared now. I am a new webmaster(still learning) with a site only 3 months old. As I was totally unaware of this sandbox it was shocking for me to find myself a victim of it. Atfirst I was confused and thought my site might has been penalised for something coz it was ranking good and suddenly this sandboxed thingy happened. And I couldn't just believe it when I was told that my site was enjoying the so called google's "Honeymoon Period". Google forum repliers also told me that this sandbox thingy is normal and it is there to ensure that each new site fights its way up to top. Some suggested me to get backlinks to my site. So I thought it was normal and started planning for getting a lots of backlinks.
As my site is new with only 1 backlink, by natural SEO laws it is supposed to work on getting backlinks. And I was exactly planning to work on this. Now that my site is sandboxed and as RANDFISH says and CHEWIE confirms that "It seems you can lengthen your stay in the box by exclusively attracting the more typical "low quality" links that signal manual link building campaigns - such as built-for-SEO directories, article submission sites, reciprocal links, dofollow blog comments, forum signature links, etc. (this is speculation on my part, and more correlation than causation, IMO)."
What am I supposed to do now with my site then? Should I stop working on getting BLs? I guess I should coz those are the only options for me to start with earning BL's. I can only dream of respected high quality sites giving me link, coz they wouldn't! And if I stop getting BLs for my site I will have to stay with 1 backlink till my site comes out of sandbox(and nobody knows when for sure). Any help or answers would be much appreciated. Thanks.


1. Make something weird out of chewing gum and googly eyes and send FamilyFun a picture.
2. Have kids take photos of any other really cool projects they've done such as crafts, games, recipes, artwork and more–and briefly explain what the project is, how it was made, and what makes it so cool.
If FamilyFun uses your idea in the magazine, they will send your child this cool t-shirt!


text:
AOBM
AOBM STATEMENT ON CONCERNS OF BRITISH MUSLIMS BEING DENIED ENTRY INTO THE US.
Paul Salahuddin Armstrong 2017, United Kingdom, United States
We are saddened to see the rise in cases of British citizens, who are or appear to be Muslims, arbitrarily being denied entry to the United States of America. Often after having already been cleared through the ESTA process.
In this, the most recent case, Khurrum Mahmood has been working with the United States Department Of State Counter Terrorism projects in Nigeria, where he narrowly escaped with his life in a Boko Haram attack that killed over 250 people.
We acknowledge and respect the right of nations to determine who they admit. We request however, that if there is a change in policy affecting British Muslims, that this be communicated to us as a matter of urgency, so we can let our members, networks and supporters know. This will enable us to go through the appropiate visa processes or make alternative arrangements.
Many British Muslims are concerned that they appear to be randomly selected and refused entry, that can result in the loss of several thousands of pounds. There is concern British Muslims are being discriminated against and unduly penalised.
The Association of British Muslims will be seeking to meet with the United States authorities in the United Kingdom to address the concerns of British Muslims, and to establish how these unfortunate situations can be avoided in future.
Paul Salahuddin Armstrong
The Association of British Muslims
www.aobm.org
Happy Eid al Adha (2017)
AoBM Concern over President Trump's Jerusalem Decision
Spicing up British life: How the food trade ripened in Britain
The many joys and delights of world cuisines are bound to be strong uniting factors in any given society. In Britain, this has certainly been the case. The food trade has informed economic exchange and Read more…
Coffee and good words: How Muslims helped grow the British economy
Who would have thought that Geoffrey Chaucer was into Muslim scholarship? As it happens, the works of that old literary genius meant that 24 Arabic words entered the English language in the 14th-century. What's more, Read more…
Preserving historical and culture heritage is part of faith
News and data emerging around cultural destruction this year has felt relentless. A new interactive map by Antiquities Coalition shows almost 700 historical sites at risk in 22 countries, including those that Daesh has deliberately Read more…
We are grateful for the support provided to us through the government's 'Building A Stronger Britain Together' programme: a programme of in-kind support for community groups across Britain providing capacity building support including social media training, communications strategy and campaign development.
© The Association of British Muslims (AoBM)

redpajama_set_name: RedPajamaCommonCrawl


text:
One Kiss From You - Britney Spears - Oops!...I Did It Again (CD, Album)
Label: Jive - 9220432 • Format: CD Album • Country: Australia & New Zealand • Genre: Pop • Style: RnB/Swing, Ballad
Bring On The Night - Racing Cars - Bring On The Night (Vinyl), Cure Me! (Original Mix) - Surreal Eternity - Cure Me! (File, MP3), Moonlight On The Sea - Leendert de Jonge - Les Chants De Nectaire (CD), Hope For The Future - Marillion - Marillion (CD), Where Death And Life Are Still Friends - Seelenwinter - Seelenwinter (Cassette, Album), Te Voet Naar Scherpenheuvel - Various - 16 Vlaamse Hits (CD), Larry Williams (3) - Id Rather Fight Than Switch (Vinyl), La Vie En Rose - Irving Fields Trio - Champagne And Bongos (Vinyl, LP, Album), Travel In Stygian, After Its Over - Roberta Martin - Roberta Martin Singers Prayer Meeting (Vinyl, LP), Untitled - Champions Of Sound - Champions Of Sound (Vinyl), Fiasco - Annihilator (2) - King of the Kill (Cassette, Album), The Three Degrees - This Is The House (Vinyl), Working Man - Kings X - Black Like Sunday (CD, Album), Aus dem Tal der toten Seelen - Daniel Eggers (2) - Fesseln der Freiheit (Freundschafts CD) (Eigenpro
Nezshura 21.02.2020 at 00:05 Reply
May 16, · "One Kiss From You" is a song recorded by Britney Spears for her second studio album, Oops! I Did It Again.
Tojalar 20.02.2020 at 23:01 Reply
rows · Britney Jean Spears (born on December 2, in McComb, Mississippi, and raised in .
Zulmaran 24.02.2020 at 06:44 Reply
The album was originally supposed to be titled Sunflower, then Platinum , but was named Oops! I Did It Again. The dialogue in " Oops! I Did It Again " is spoken by Spears and the song's writer and producer, Max Martin.
Brataxe 18.02.2020 at 11:52 Reply
It was released on May 16, in the United States through Jive Record Oops! I Did It Again is the second studio album by American singer Britney Spears. It was released on May 16, in.
Mall 19.02.2020 at 22:57 Reply
Print and download One Kiss from You sheet music by Britney Spears. Sheet music arranged for Piano/Vocal/Guitar in C Major. SKU: MN
Bragor 20.02.2020 at 07:12 Reply
Discogs: CD, Oops! I Did It Again. リリースのクレジット、レビュー、トラックを確認し、購入。.
Fenrilrajas 24.02.2020 at 11:20 Reply
I Did It Again is the second studio album by American singer Britney Spears. It was released on May 16, in the United States through Jive Records. The album is primarily a pop, dance-pop, and teen pop record, much in the vein of her debut studio album Baby One More Time (). [3].
JoJozil 25.02.2020 at 05:40 Reply
ths is britney's second album. Well. I have nothing to say except NaruSaku Rockz.. I'm also an avid fan of Final Fantasy 7 and I ♥♥♥LOVE♥♥♥ ANIME AND MANGA!!!.
Juk 24.02.2020 at 03:44 Reply
The track was released on March 27, , by JIVE Records as the lead single from the record. "Oops! I Did It Again" is a song that lasts for a duration of three minutes and thirty seconds. It is composed in the key of C ♯ minor and is set in time signature of common time, with a .


If you are looking for standing funeral sprays in Chicago, THE GOLDEN ROSE FLORIST can help. We specialize in funeral flowers and can create the perfect memorial for your final tribute. Order your floral standing spray online or call us at (312) 819-5988 for something more custom.


Kalucka topped the women's podium in the event for climbers between the ages of 16 and 17 after she beat Kamilla Kushaeva of Russia in the head-to-head final.
The Polish climber clocked 8.38sec to edge the Russian into the silver medal position.
The bronze medal went to Kalucka's sister Aleksandra, who defeated Russian opponent Daria Potopova in the small final thanks to her time of 8.31.
Russia bounced back from the disappointment in the women's event as Nagaev reigned supreme in the men's speed final.
Nagaev's time of 6.66 proved too quick for American Jordan Fishman, who was unable to record a time after falling during the gold medal contest.
Russia cemented their dominance of the event by also securing the bronze medal as Eduard Daukaev beat Nickolaie Riva Deneira of Estonia in the small final.
The Russian athlete's time of 7.21 saw him join Nagaev on the podium.
The Championships in the Russian capital are due to continue tomorrow.


Peer Connect :: Whose Life is it Anyway?
WAiS is pleased to open registration for their exciting two-day conference on 8-9 May 2016 called Whose life is it anyway?
International guests include Stephen Hinkle and Peter Leidy.
Click here for more information from WA Individualised Services.


Sarah Mei has spent most of the last dozen years writing code, and most of the last four doing Ruby. In 2009, she co-founded RailsBridge, a nonprofit dedicated to making the Ruby and Rails communities welcoming to all. Since then, her Open Workshop project has sponsored six events in three cities and introduced over 250 people to Rails, Ruby, and in some cases, programming. Sarah works at Pivotal Labs and has, among other things, two kids, a cat, seventeen computers in various states of repair, and one very understanding husband.
SQL databases are awesome at certain problems. But most Rails apps encounter data challenges that make traditional databases look seriously puny. So...is SQL over? In this talk, we'll dig into the guts of the relational model, look at the problems SQL doesn't solve well, and - crucially - understand why. Then we'll answer the million-dollar question: is NoSQL the only alternative? Read more.


text:
Fully Integrated Bundles Offer Top Quality and First-rate Reliability
CHICAGO, IL and LOS GATOS, CA – (March 27, 2018) – NEC Display Solutions of America and BrightSign today announced that the companies will be offering bundled signage solutions consisting of an NEC commercial-grade display with an integrated BrightSign digital media player. These bundles, one of the first promotions from NEC's Alliance Partnership Program, will offer deep discounts to the channel.
"NEC has a proven track record of working with complementary partners to deliver world-class solutions through the channel," said Richard Hutton, Senior Director, Channel Marketing at NEC Display Solutions. "BrightSign has been an active member of our Alliance Partnership Program since its inception, and we have worked together on many opportunities. The promotional offering announced at DSE is the latest in our joint effort to bring cost-effective and reliable solutions to the market."
"BrightSign is the global market leader in digital signage media players, and NEC has a world-class brand known throughout the industry," said Ann Holland, BrightSign's Vice President of Marketing. "This new turn-key solution was built on our companies' shared commitment to quality and reliability, and we expect it will be well received by IT and AV professionals."
NEC's new C Series and award-winning V Series displays — when sold with a BrightSign Series 3 LS, HD or OPS-compatible HD media player (HO523) — will have a promotional rebate available through Ingram Micro, Stampede, Almo and BlueStar. These bundles are perfect for a large percentage of digital signage needs, and business clients can expect full support from NEC Display Solutions and BrightSign throughout the life of the project to ensure the best possible outcome.
About NEC Display Solutions of America, Inc.
NEC Display Solutions of America, Inc., a leading designer and provider of innovative displays, offers the widest range of products on the market, such as commercial- and professional-grade large-screen LCD displays, desktop LCD monitors, direct view LED displays, a diverse line of multimedia and digital cinema projectors, and integrated display solutions. Benefitting from the technologies of NEC Corporation and its own Research and Development, NEC produces leading-edge visual technology and customer-focused solutions for a wide variety of markets, including education, retail, transportation, broadcast, enterprise, healthcare, houses of worship, and many more. NEC is orchestrating a brighter world with the quality and reliability of its products and outstanding customer service. For additional information about NEC Display Solutions of America products, call (866) NEC-MORE, or visit the website at www.necdisplay.com. Follow us on our social media channels: Facebook, YouTube, Google+, Twitter and LinkedIn.
NEC Corporation is a leader in the integration of IT and network technologies that benefit businesses and people around the world. By providing a combination of products and solutions that cross utilize the company's experience and global resources, NEC's advanced technologies meet the complex and ever-changing needs of its customers. NEC brings more than 100 years of expertise in technological innovation to empower people, businesses and society. For more information, visit NEC at www.nec.com. The NEC Group globally provides "Solutions for Society" that promote the safety, security, efficiency and equality of society. Under the company's corporate message of "Orchestrating a brighter world," NEC aims to help solve a wide range of challenging issues and to create new social value for the changing world of tomorrow.
For more information, please visit http://www.nec.com/en/global/about/solutionsforsociety/message.html.
BrightSign LLC, the global market leader in digital signage media players, is headquartered in Los Gatos, California, with offices in Europe and Asia. BrightSign manufactures media players, and provides free software and networking solutions for the commercial digital signage market worldwide, serving all vertical segments of the digital signage marketplace. From entry-level BrightSign LS players to BrightSign XT players offering state-of-the-art technology and unsurpassed performance, BrightSign's products are known for their signature reliability, affordability, ease-of-use, and market-leading technology. For more information, visit www.brightsign.biz. Follow BrightSign at http://twitter.com/brightsign and http://www.facebook.com/BrightSignLLC.


text:
Us (2019)
Movies/Reviews
by Martin Cid
Us is a 2019 horror movie starring Lupita Nyong'o. It is written and directed by Jordan Peele.
The year is 1986. Young Adelaide and her parents go to a funfair at Santa Cruz Beach. While her parents are distracted, Adelaide is drawn into a funhouse and once she enters the hall of mirrors she encounters her double, which is a frightful experience that leaves her seriously traumatized.
Years pass, and now Adelaide is grown and has a family of her own together with her husband, Gabe (Gabriel) Wilson.
She and Gabe take their two children, Zora and Jason, to Santa Cruz to enjoy their summer vacation by the beach. Nightime falls, they are in the summer house when, first spotted by Jason, a family of four appears at their driveway. Their silhouettes hold an uncanny resemblance to the Wilson family. As events unfold it becomes obvious that these strangers are in fact doppelgängers, and they are there to replace them.
Very entertaining, original, with a good script, great performances, and an ending that… we liked.
New York Film Critics Circle: Best Actress (Lupita Nyong'o)
Los Angeles Film Critics Association: Nominated for Best Actress (Nyong'o)
Jordan Peele at arrivals for 2018 Film Independent Spirit Awards – Arrivals, Santa Monica Beach, Santa Monica, CA March 3, 2018. Photo By: Elizabeth Goodenough/Everett Collection. Depostiphotos
Jordan Peele is an American filmmaker, writer and actor known for the movies Get Out (2017), Us (2019) and Nope (2022).
Jordan Haworth Peele was born on February 21, 1979 in New York, USA.
This brilliant filmmaker began his career as an actor in Comedy Central and he made his first film in 2016, Keanu. The following year, he rose to fame thanks to his movie, Get Out for which he won the Academy Award for Best Screenplay.
After that, he directed Us (2019), starring Lupita Nyong'o.
His latest movie is Nope (2022).
He is also a great voice actor (Toy Story 4).
Lupita Nyong'o at the 20th Annual Screen Actors Guild Awards Arrivals, Shrine Auditorium, Los Angeles, CA 01-18-14. Depostiphotos
Lupita Nyong'o is an Oscar-winning actress for the film 12 Years a Slave (2013).
Lupita Amondi Nyong'o was born on March 1, 1983, in Mexico City.
Lupita Nyong'o became world-famous when she won the Oscar for British director Steve Rodney McQueen's film, 12 Years a Slave (2013). Since then, she starred in many movies like Us (2013), Little Monsters (2019) and others.
She starred in Jordan Peele's movie Us (2019).
She has also participated in Star Wars saga, The 355 (2022), and Black Panther (2018).
And we will see her in the new John Woo's movie The Killer (2023). She is the producer of the film.
"Peele uses the metaphor of the divided self to explore what lies beneath contemporary America, its double consciousness, its identity, sins and terrors."
Manohla Dargis: The New York Times
"Nyong'o delivers one of the great performances in horror movie history (…) [She is] right up there with Sissy Spacek in 'Carrie' and Jack Nicholson in 'The Shining'
Peter Travers: Rolling Stone
Movie title: Us
Movie description: The year is 1986. Young Adelaide and her parents go to a funfair at Santa Cruz Beach. While her parents are distracted, Adelaide is drawn into a funhouse and once she enters the hall of mirrors she encounters her double, which is a frightful experience that leaves her seriously traumatized.
Date published: July 24, 2022
Duration: 120 mins
Director(s): Jordan Peele
Actor(s): Lupita Nyong'o, Winston Duke, Elisabeth Moss, Tim Heidecker, Yahya Abdul-Mateen II, Anna Diop, Kara Hayward, Evan Alex Cole
Latest from Movies
The Greatest Underdog Stories to Stream Right Now
Everybody loves an underdog story, we can all enjoy rooting for the little guy, especially when
'Shotgun Wedding' (2023) Movie Review: A Fun Action Comedy with JLo as Main Attraction
Shotgun Wedding is a 2023 Prime Video comedy movie directed by Jason Moore starring Jennifer Lopez
'Teen Wolf: The Movie' (2023): An Entertaining Movie for YA
Teen Wolf: The Movie is a movie directed by Russell Mulcahy starring Tyler Posey, Crystal Reed
'You People' (2023) Movie Review: A Mix Between Caustic and Comfortable
You People is the upcoming Netflix comedy starring Jonah Hill, Lauren London and Eddie Murphy. It
'M3GAN 2.0' (2025): the sequel to M3GAN will be released in January 2025
M3GAN 2.0 will be the sequel to M3GAN and is scheduled for release in January 2025.


Henry Liu will not be a savant by the common definition books of Forex trading, He has by no means traded for any bank, or instantly even for a dealer however he has smartly panned out his Forex trading ideas in a method that it is helping many retail Forex traders get the very best out of their enterprise. The ultimate worth COMPANIES often pay is the full of the embassy's visa price (varies), the VSC service payment (normally $a hundred and fifty), and the secure return package deal value (often $43), cash order prices (often $10), plus taxes. The loss of value on the equities market meant lack of worth of the collateral, which most banks held in lieu of the loans they'd advanced.
You should not have to ship VSC your passport multiple occasions. As a normal rule, only the people who are on the initial stages of a multi-stage advertising group make a lot of money. Special rush service is usually available for additional fees charged by the embassy.
Woosley mentioned the involvement of Enterprise West, board members like Robbins and longtime native businessman Fletcher McCusker will assist the incubator succeed. That is most often carried out on a reciprocal foundation, meaning that if Canada requires a visa from residents of a certain country, then that country's authorities usually requires visas from Canadian citizens.
Are public relations and disaster management planning vital to what you are promoting? VSC workers enter your information on the visa kind because of personal request or embassy requirement $50. Different visa companies in Canada are owned by US firms, and their Canadian purchasers' private data will be learn by the US authorities.
It is also a solution to observe the local economic local weather and discover out who the individuals are that would help you with various elements of your online business. VSC accepts fee from enterprise clients by VISA and Mastercard credit cards due to the fluctuating costs as charged by diplomatic missions (embassies).
World Business and Financial News, Inventory Quotes, and Market Information and Evaluation. It is the duty of VSC to change forex to that required by the precise embassy or High Commission or consulate with the intention to pay for the visa processing as required by that country.
Whether you personal a restaurant, dry cleaners, carpet store, medical practice or some other business that serves the general public financing a enterprise is problematic in immediately's economic environment. People who will get tired of watching business news are individuals who should not have a lot concern about business, they might even say it is none of their business the place in reality, enterprise information is suppose to be everyone's business.
Visa Companies Canada usually expenses a flat service charge of $seventy five for visas to most nations on the earth: a major saving over the competition. 2. In a courier envelope, place your VSC software type, visa type, pictures, and passport, and another crucial document, and ship it to VSC.
Refugees with a "Travel Doc" (1951 UN Conference document), and foreigners with a "Certificates of Id" issued by Canada, are usually not accepted as visa clients. JSTV's programming includes Christian associated information, business, music, bible studies, gospels, worship providers and far more.
When many corporations are using unethical enterprise practices, instead of attempting to appropriate the problem, they try to cover it up. They may even go as far as paying loads of cash on advertising and public relations to try to disguise the issues at hand.
A conference is a gathering of individuals where they discuss ideas, opinions and numerous areas of interest. Some visas have a far shorter validity, and others will be extended as soon as inside the country. The deregulation additionally allowed banks some latitude to function in non-core companies. There was neither nationalisation of foreign banks nor restrictive legislative interference on which sectors to fund or the rates of interest to cost, regardless of the socialistic national ideology.
Some embassies charge for their visas in a international foreign money; usually US$ or Euros. One other influence of the agrarian reform programme was that almost all farmers who had borrowed money from banks could not service the loans yet the federal government, which took over their companies, refused to assume responsibility for the loans.
Refugees with a "Journey Doc" (1951 UN Conference document), and foreigners with a "Certificates of Identity" issued by Canada, usually are not accepted as visa purchasers.
News programmes have abruptly become sizzling property and are vying for consideration with different fashionable programmes telecast in numerous channels. On the off chance that you just unsettle the pages of enterprise information, you will notice that the merchandise and enterprises assess was actualized in Canada out of the blue. VSC accepts money orders, certified cheques, company cheques, and credit card funds from prospects.
Since this was enacted when most business banks the place foreign owned, there were no directions on prudential lending, insider loans, proportion of shareholder funds that might be lent to one borrower, definition of danger property, and no provision for bank inspection.
As soon as VSC pays the embassy, the cash can't be recovered, and cost doesn't assure a visa will probably be issued. VSC deals instantly with the embassies or Excessive Commissions or consulates to get your visa software processed within the shortest time doable. COMMON Authentication at DFAIT and delivery to embassy in Canada for legalization service $100 for first document, plus $50 for every further doc; or $400 for a package of ten documents.
The Banking Act (24:01), which got here into impact in September 1999, was the end result of the RBZ's desire to liberalise and decontrol the financial services. They argue that it is not uncommon for banks to take fairness positions in non-banking establishments they've loaned money to safeguard their investments.
It doesn't matter what the character of your small business, you need to pay attention to what is going on in your native economy. No. VSC is a personal corporation owned and primarily based in Canada offering service to citizens and authorized residents of Canada below Canadian regulation. This damaging financial environment meant diminished banking activity as industrial activity declined and banking companies were pushed onto the parallel rather than the formal market.
No. Visa Services Canada is just not an immigration service for Canada. Be it about inventory market, banking world or plain news updates, Lokmat news channel is something that individuals can bank upon at any point of time. Canadian regulations state that skilled immigration help is just not required or acknowledged, and doesn't advance or velocity your software in any means, nor does it assure a visa.
Monetary statements are produced at the least yearly by the accountant. But with no local enterprise incubator, the corporate was launched by way of an incubator in Los Angeles, the place another co-founder lived. Most visas can be found with abnormal service inside two weeks. Now is the time for YOU to have a profitable home-based business that YOU MAY MANAGEMENT and the place YOU DETERMINE how much money you earn day by day.
Visa Services Canada will settle for fee by cash order, certified financial institution cheque, wire transfer, or company cheque only by prior association. People stopped utilizing banks as intermediaries as they weren't positive they would have the ability to entry their cash at any time when they needed it. This decreased the deposit base for banks.
One of the indicators of recessions is the increase within the variety of worldwide and huge corporations that determined to shut or to go out of business. A normal public relations program is vital to your business to: complement promoting; present research capabilities for advertising efforts; provide capabilities for particular events to increase firm & industry visibility; monitor governmental organizations; to communicate the state-of-the-industry to the general public, including views on legislation, laws, financial situations, and other factors and events impacting your online business; and to communicate with previous and present clients.


text:
Home Design & Decorating Room Design Outdoor Spaces Swimming Pools & Spas
Freeform Swimming Pools
Slobo / Getty Images
Freeform swimming pools are most often constructed of concrete or vinyl. After a hole shape is excavated in the ground and framework is in place, concrete is poured and can be filled to create any shape, size, or configuration.
Vinyl-lined pools can be made into free-form designs that can feature a variety of designs.
What Is a Freeform Pool?
Unlike a traditional swimming pool, which is usually a rectangular shape and lined with tiles, a freeform swimming pool is designed in a naturalistic or irregular shape, with curves or flowing lines. (The kidney shaped pool is one of the most well known freeform pool shapes.) Contemporary freeform pools often have rock and waterfall features and are designed to resemble a natural pond, lake, or oasis.
History of Freeform Pools
The first freeform pools were built in California, which dominated residential pool design in the 20th century. One was built for Pickfair, the Los Angeles estate owned by actors and Hollywood power couple Mary Pickford and Douglas Fairbanks.
Built in 1920, it was constructed above a 100-foot banana-shaped tank and featured a sandy shore along one side. The other was built by Pascal Paddock (of Paddock Pool fame) and featured poolside landscaping to give the feeling of a natural pool or pond. Ince died of mysterious circumstances in 1924 near San Diego while aboard a yacht owned by William Randolph Hearst.
Paddock Pools
In the late 1930s, Philip Ilsley, a landscape architect and chairman of the board of Paddock Engineering (later Paddock Pools), built the first "people's pool" in West Los Angeles for less than $1,700. Breaking out of the boxy or linear mold, Ilsley often designed freeform shapes. Instead of pouring—or hand-packing—concrete into steel-mesh forms, he sprayed it on, a process borrowed from the building trade. Guniting, as it's known, cut the time and cost of construction, revolutionizing the pool industry. While World War II delayed the building boom for pools and everything else, the business increased after the war.
Postwar, between 1948 and 1957, residential swimming pools in the United States grew from 2,500 to about 57,000, with 33,000 built in 1956 alone. Many sported the kidney and freeform shapes pioneered by Ilsley.
Not surprisingly, Ilsley and his wife later owned property at the top of the Hollywood Hills, where they built one of the most iconic freeform swimming pools in history, in the shape of a hepatica leaf. It is sometimes referred to as the clover or cloverleaf pool.
The Donnell Pool
In 1948, renowned designer and builder Thomas Church and landscape architect Lawrence Halprin designed a kidney or biomorphic-shaped swimming pool for a Mid-century modern home in Sonoma, California, owned at the time by the Donnell family. The groundbreaking shape inspired several copycats in the following decades. Church is said to have been inspired by the region's creeks and marshes.
km406 / Getty Images
Contemporary Freeform Pools
Those backyard pools that feature faux boulders, rocks, and waterfalls and are built to resemble a natural pond or body of water are more likely to have freeform shapes than be a perfect rectangle or L-shape. Materials used are natural or reflect those found in nature.
A good freeform pool could make a swimmer feel like they're swimming around a grotto rather than an a suburban backyard. Of course, the right plants and landscaping are what will truly make your freeform swimming pool to an elevated oasis.
9 Popular Swimming Pool Shapes and Designs
Learn All About the Kidney-Shaped Swimming Pool
The 25 Most Amazing Modern Pool Designs
A Guide to Swimming Pool Types, Designs & Styles
50 Spectacular Swimming Pool Waterfalls & Water Features
How Much Does an In-Ground Pool Cost?
44 Great Backyard Landscaping Ideas
32 Clever Stock Tank Pool Designs and Ideas
50 Pool Designs to Make Your Dream Yard a Reality
Try These 23 Beautiful Mediterranean Pool Designs
Swimming Pools: Discover 24 Great Ideas for Rectangular Designs
14 Fabulous Modern Garden Designs and Ideas
21 Stone Fire Pits to Spark Ideas for Your Outdoor Space
Big Ideas for 33 Small Pool Designs
How to Design the Perfect Lap Pool
50 Outdoor Dream Kitchens


text:
Property, Planning & Construction
Water & Water Trading
Litigation & Dispute Resolution, Debt Recovery
Injury Law / TAC Claims
Succession & Estate Planning
Pay Your Legal Bill
Tatura
Law firms Dawes & Vary and Felthams are delighted to announce a merger to take effect from 27 October 2014. The merged firm will trade as "Dawes & Vary" and will be located at 159 Welsford Street, Shepparton.
Both firms have served many generations of clients in the Goulburn Valley. Dawes & Vary was established in 1893 and Felthams in 1938, so this is quite a significant move for both firms.
Felthams have loyal clients and we look forward to continuing working with those clients, under the new banner and from a new location. We really hope that our clients will celebrate this move with us, and enjoy the benefits of the broad range of expertise and modern facilities that will be available to them following the merger.
Charles Hart, a director of Dawes & Vary based in the Shepparton office said that both firms have had a strong presence in the area of Property Law, with Felthams being synonymous with the residential developments of Kialla Lakes, Archer's Field, Northside Estates, River Park and many others.
"The merged firm of Dawes & Vary will continue that property based focus, and in addition provide legal services in a range of other areas including Commercial & Civil Disputes, Commercial Law, Retail and Commercial Leasing, Sales of Businesses, Succession Planning, Family Law, Mortgages, Water Law, Wills and Deceased Estates, " said Charles. "We have expertise in Victoria and NSW, so we can cover most legal matters that arise".
"This merger will make Dawes & Vary one of the largest regionally based law firms in Victoria. " Charles said. "Clients have the benefit of access to the combined knowledge of 26 lawyers and legal executives, (including Law Institute of Victoria Accredited Specialists) and over 65 staff members."
"One person can't be an expert in everything", Charles said. "We are a large enough firm to have lawyers who specialise in particular areas of law. We think that gives us an edge."
"This is the way of the future," Charles added. "Clients have a right to expect us to do all we can to offer top quality legal services at a reasonable price. Being bigger gives us costs efficiencies, and allows us to offer a broad range of legal expertise delivered in the most efficient and cost effective way. The merger makes perfect sense. We are a progressive, modern law firm on the move, and we are excited about where the merger will take us."
Dawes & Vary has offices in Echuca, Tatura, Kyabram, Cobram, Nathalia, Rochester and Shepparton.
© Copyright 2018 - Dawes & Vary Riordan Pty Ltd
Site Design: This email address is being protected from spambots. You need JavaScript enabled to view it. Site Build: Mediart Solutions


text:
Q: Detect if two polygons have an area in common I need to know if some part of a Polygon is being shown on screen. I have two ArrayLists of LatLng, one containing the list of points forming the Polygon, and the second one containing the four corners of the screen.
This is my code:
protected boolean doPolygonsHaveAnyCoincidingArea(ArrayList<LatLng> polygon1, final ArrayList<LatLng> polygon2) {
    for (LatLng point : polygon1) {
        if (isPointInsidePolygon(point, polygon2)) {
            return true;
        }
    }
    for (LatLng point : polygon2) {
        if (isPointInsidePolygon(point, polygon1)) {
            return true;
        }
    }
    return false;
}

private boolean isPointInsidePolygon(final LatLng tap, final ArrayList<LatLng> vertices) {
    int intersectCount = 0;
    for (int j = 0; j < vertices.size() - 1; j++) {
        if (rayCastIntersect(tap, vertices.get(j), vertices.get(j + 1))) {
            intersectCount++;
        }
    }
    return (intersectCount % 2) == 1;
}

private boolean rayCastIntersect(final LatLng tap, final LatLng vertA, final LatLng vertB) {
    final double aY = vertA.latitude;
    final double bY = vertB.latitude;
    final double aX = vertA.longitude;
    final double bX = vertB.longitude;
    final double pY = tap.latitude;
    final double pX = tap.longitude;
    if ((aY > pY && bY > pY) || (aY < pY && bY < pY) || (aX < pX && bX < pX)) {
        return false;
    }
    final double m = (aY - bY) / (aX - bX);
    final double bee = (-aX) * m + aY;
    final double x = (pY - bee) / m;
    return x > pX;
}

However, I think doPolygonsHaveAnyCoincidingArea is slower than it could, as sometimes the common area is just a little triangle, so only one of those isPointInsidePolygon will return true.
Is there any faster way to determine if two polygons collide or one contains the other?

A: It is not enough to check that any vertice of one polygon is inside the second (imagine two equal squares, one rotated 45 degrees).
You have to:

*

*Find whether any side of polygon intersects axis-aligned rectangle (screen). Try metamal answer here.

*If not, check whether one vertice of polygon is inside the rectangle (very simple test)

*If not, check whether one vertice of rectange is inside the polygon (use your function)

redpajama_set_name: RedPajamaStackExchange


Desert IT Solutions was founded by UNLV graduates of business and technology. Together we help businesses facilitate their goals with the integration of technology.
With time and experience, we realized business and technology needed to be simplified and understandable, a seamless process across and integrated into daily business operations. Through listening, we believe that we can achieve to a common ground of understanding, meeting the needs of our clients and enhancing their technology experience. Through this understanding, we prioritize what matters most. We strive to inform our clients of the simplest solutions while keeping goals aligned and business systems working at their best.
We aim to do what is right, and not what is most profitable. We strive to provide scalable solutions to you, but not more than what you bargain for. We believe in moderation in everything.
With offices located in Summerlin, Las Vegas, we serve business clients throughout Southern Nevada with a full range of IT and systems support services. From VOIP phones to networks, we help you optimize your business technology so it can help you grow your business.


text:
Essays / December 6, 2016
Why I Write Indigenous Sci-Fi
Growing up on the reserve, the sci-fi I loved was considered more of a Caucasian genre. Luckily, literature has changed, and so have I.
The shelves at Bakka Phoenix Books in Toronto are full of sci-fi—a growing part of it Indigenous, like Drew Hayden Taylor's new book Take Us to Your Chief and Other Stories, which launched there in October. Photo: Bakka Phoenix via Facebook.
"Aye Captain, the Indians canna take her."
Forgive my paraphrasing of the above Star Trek idiom—but that's where it started for many of us, both Native and non-Native. Those cold snowy winter nights on the reserve with an equally snowy television channel showing us that there was indeed life off the reserve, and quite possibly, in different solar systems.
That iconic show—plus The Six Million Dollar Man, Space: 1999 and a myriad of other sci-fi classic (and not so classic) television series—showed my generation what the future could potentially hold. Add to that Star Wars, Alien, E.T. the Extra-Terrestrial and the plethora of classic sci-fi movies that played in the local theatre, and I was sold.
Soon, I discovered the written works of authors like H.G. Wells, Jules Verne, John Wyndham and John W. Campbell, devouring books and short stories by the bushels. Then came Heinlein, Asimov, Bradbury, Clarke…and the list continues. The authors got newer as I got older. But I was sold. Since then, I've loved science fiction—or speculative fiction, for the more refined.
More years passed, and somehow along the way, I became a writer. I wrote many things, primarily but not limited to plays, and the occasional novel or collection of short stories. But always, hiding in the back of my mind, I longed to write something that basically did not as yet exist. A genre that in itself was considered practically an oxymoron.
When I started writing, Native science fiction was, by definition, a contradiction in terms. By that I mean Native literature was generally believed to consist of three avenues of literary exploration: victim narratives, historical themes, or side effects of what I call Post-Contact Stress Disorder.
It seemed, as a result, that Native people and technology did not go together. Nor did spaceships, or aliens or even science in general stop in at First Nations communities looking for cheap gas and cigarettes. Instead, literarily speaking, we just travelled in canoes, hunted buffalo, had alcohol problems and suffered a number of other social ailments.
In those days, science fiction was considered more of a Caucasian genre. Specifically, male Caucasian. Most of the pioneers of the genre were men of the dominant culture. Occasionally, a woman might slip in, and on occasion, somebody of colour might be found hiding behind a couch, but for the most part, the field was essentially—if you'll pardon the pun—whitewashed.
So as a struggling, up-and-coming young Ojibway writer, the idea of writing Native science fiction was completely a foreign concept. You see, Native people simply did not write science fiction. Just like we did not write erotica, murder mysteries, vampire novels or fantasy books. No more than a fish could ride a bicycle or trees could tap dance. (Ironically, also in the recent past, Native people weren't allowed to leave their reserve, hire a lawyer or hold a powwow. So, with all those more pressing problems, we really didn't notice what we were not allowed to write about.)
I never felt this was right. Within the Native community, our imagination, our sense of what is possible was as wide, as expressive and as detailed as any other people on the face of the Earth. Why couldn't we write science fiction? Many of our traditional stories could easily be classified as such. Different Indigenous nations have numerous stories about star people coming to Earth, or women falling from the sky, or people travelling up into the stars. Images on pictographs and petroglyphs have been theorized by some to represent possible alien travellers. It was all there; you just had to be aware of what you were looking for.
Luckily, in recent years, the perception of what Native authors are capable of writing has broadened. In your local bookstore are collections of topics as varied as Indigenous erotica (sort of a 50 Shades of Red), a fantasy trilogy with elves, magic and swords written by a Native writer, and even murder mysteries penned by the famous Thomas King. It was only a matter of time.
This new openness to Indigenous sci-fi is also reflected in visual art and film. Earlier this year, the Toronto International Film Festival asked six Indigenous artists—including Kent Monkman and Scott Benesiinaabandan—to use VR to envision Canada's future 150 years from now. Montreal artist Skawennati, who represented Canada at the 2015 Biennial of the Americas, is known for her work TimeTraveller, which uses science fiction to examine First Nations histories. Calgary-born filmmaker Benjamin Ross Hayden showed his futurist feature The Northlander, set in 2961, at Cannes earlier this year.
But even with this shift in pop-culture awareness, I still felt obstacles to writing sci-fi myself.
Here's why: the origins of my new sci-fi book have a dark and foreboding origin. For a long time, I have had a reluctance to immerse myself in the world of prose. Yes, through sheer willpower and a need to pay the mortgage, I have managed in the past to pump out two novels and a previous collection of short stories. But prose is not a field I find myself eager to plow.
I have long been more comfortable weaving tales onstage, through live dialogue or personal storytelling. The world of prose is a harsh and difficult taskmaster, one requiring a comfortable knowledge of such creatures as split infinitives and dangling participles. Having been educated in my early years on the reserve, many of these concepts have felt beyond my expertise.
As a result, my first idea for tackling a sci-fi book was to compile and edit a collection of other Native writers' sci-fi stories. I contacted the cream of the Aboriginal crop of Canadian writers, inquiring if they might be interested in exploring and contributing a science-fiction anthology. Practically to a man (and woman) they all enthusiastically agreed, eager to see to what planets and universes their keyboards took them to.
But alas, this dream was not to be. The field was too new and unexplored, and possibly a little too expensive considering the talent I had wanted to engage in my fantasy. Several publishers failed to bite at the prospect, and the project fell dead. I was very disappointed.
Then I had one of those epiphanies writers get occasionally. I was sitting at home in a deep funk, and I think I literally said, "Ah screw it, I'll do it myself."
Nothing generates a book like frustration. I had been so excited and so pumped for this project for so long, I wrote six stories in four months and then four stories in the next six months, and before long, I had a book. It was one of the easiest projects I had ever worked on, and one of the most enjoyable. I almost want to thank those publishers for turning down my original concept.
Technically speaking, I think one of the metaphors most likely to catch on in the Native sci-fi writing community—if and when one develops—will be the exploration of contact. With aliens or multi-dimensional creatures or parallel universes or whatever. I say this because, as the adage goes, write what you know. And we know very much about contact. In fact, for the most part, we are still dealing with it.
Originally from the Curve Lake First Nations in Central Ontario, Drew Hayden Taylor is an award-winning playwright, author, columnist, filmmaker and lecturer. His latest book, released in October, is the sci-fi short story collection Take Us to Your Chief and Other Stories.
Drew Hayden Taylor
View recent articles by Drew Hayden Taylor
Essays / May 21, 2018
Dirty Words: Interesting
"Interesting" might be a vague, meaningless way to describe art. It might also be at the heart of how art is given value, and is made political.
Essays / May 1, 2018
Dirty Words: Labour
Technicians and installers are central to an art institution's function. Why are they so often rendered invisible?
by Jaclyn Bruneau
Essays / April 5, 2018
Dirty Words: No
Those identified as women, in particular, are often told to just say no; they are also told, in actions and in art, that their no means nothing
by Haley Mlotek
Essays / March 29, 2018
Dirty Words: Representation
The visibility of trans women in the arts has vastly increased in the past half-decade, but the sense of freedom has not.
by Kai Cheng Thom
Essays / March 1, 2018
So What If Art Selfies Are Narcissistic?
As a big Yayoi Kusama show opens in Toronto, selfie-shaming is also in the air. But the fact is, selfies are vital to situating people of colour within largely white art institutions


And he was as to establish being reigned of R'chav'am, and as to be strong him, he left being instructed of Y'hovah and all of Yis'ra'el with him.
With thousand and two hundreds being ridden, and with sixties thousand horsemen, and being no being counted of the people whom they came in with him from Mits'rayim Luvim, Sukiyim, and Chushim.
And he captured cities of the ones being fortified that of Y'hudah, and he went in upto Y'rushalaim.
And when to see, Y'hovah, that they were humbled he was being spoken of Y'hovah to Sh'mayah, to say: 'They humbled themselves; not I will destroy them; and I will give to the them as being little of for being escaped and not I will pour forth heat of me on Y'rushalaim by hand of Shishaq.
for they will be to him for servants, and they will know service of him and service of ones being reigned of the lands.
And he went up, Shishaq, one reigning of Mits'rayim, against Y'rushalaim, and he took treasures of house of Y'hovah, and treasures of house of the one reigning, the all of he took, and he took shields of the gold that he made Sh'lomoh.
And he made, the one reigning, R'chav'am, places of them shields of bronze and he committed on hand of ones commanding of the ones running, the ones keeping opening of house of the one reigning.
And he was from needs of to go in, the one reigning, house of Y'hovah they went in, the ones running, and they bore them and they made go back them to alcove of the ones running.
And when to be humbled him he went back from him, breathing hard of Y'hovah, and not to destroy to being complete, and also in Y'hudah he was ones being spoken, one being good.
And he strengthened himself, the one reigning, R'chav'am, in Y'rushalaim, and he reigned indeed son of forties and one of year, R'chav'am, when to reign him and seven ten year he reigned in Y'rushalaim, the city that he chose, Y'hovah, to set name of him there from all of branches of Yis'ra'el. And name mother of him Na'amah, the Amonit.
And he did the being evil that not he made ready heart of him to seek Y'hovah.
And ones being spoken of R'chav'am, the ones being first and the ones being last, not them ones being written in ones being spoken of Sh'ma'yah, the prophet, and Ido, the one seeing, to be enrolled. And ones being fought of R'chav'am and Yarov'am all of the days.
And he lay down, R'chav'am, with fathers of him, and he was buried in city of David, and he reigned, Aviyah, son of him, ones being instead of him.


If you're considering jetting off for sunnier climes on a golfing holiday, who could blame you? The weather in the UK isn't exactly roasting at the moment and we've all been waiting for the hot weather to finally arrive. Rather than sitting around wasting your summer, why not pack your clubs, organise your golfing travel insurance cover and head off on the golfing holiday of a lifetime!
Of course, you could take a golfing holiday in the UK - you might find a sunnier part of the country to enjoy! Some of the best golf courses in the UK can be found in England - here are just a few ideas to get you going!
Royal Lytham & St Annes course is a championship golf course set in countryside around 10 miles from Royal Birkdale. It's a tough course that's not recommended for beginners, but if you think you have what it takes the scenery is stunning and you're close enough to Blackpool for a relaxing day off by the seaside in between games!
If you fancy heading a bit further afield for your golfing holiday, don't forget to add golf cover onto your travel insurance policy - this costs less than you might think! You can take golf insurance as part of single or multi-trip travel insurance to ensure that all your precious golfing clubs and equipment are insured in case of loss or theft. Here are a couple of great golf courses to check out on your travels.
The Ocean Club on Paradise Island in the Bahamas is a little slice of paradise that you will never want to leave! This huge luxury resort boasts not only the golf course itself but is also home to casinos and decadent hotels, so you can really spoil yourself on your golfing break!
A little closer to home, L'Albatros is just 20 miles from Paris and will host the 2018 Ryder Cup - so you'd better get there quickly! Opened in 1990, this course will test your golfing skills to the max and if you're looking for other activities, Paris is just a stone's throw away.
Whether you head to a golfing resort in the UK or abroad this summer, the weather can be a bit unpredictable to say the least, so make sure you pack your waterproofs!


This is a sponsored post for SheSpeaks and Republic Wireless. Like most parents, I am always looking for ways to save money without sacrificing the things my family needs. Finding new ways to trim the budget is never a fun thing to do, but necessary to afford travel and other things we like to do….


American Sewer has built a reputation as one of the best drain cleaning services in the twin cities area.
If your tub, toilet, sink or floor drain is draining slow, or simply isn't draining at all, your drain is either clogged or in need of repair. American Sewer drain and plumbing experts are happy to assist you with kitchen drain cleaning, bathroom drain cleaning, and basement drain cleaning. Our drain cleaning experts use cutting-edge technology that is specifically designed to effectively remove clogs and repair troublesome leaks. Our technology provides confidence that your plumbing and drains are back in working order. With American Sewer's 100% satisfaction guarantee, you can have peace of mind that the job is done right.
Our high-pressure water jetting service uses high-velocity water to safely and effectively remove any accumulated iron ocher, silt, grease or other debris that may be trapped inside of your drains. This method is effective at covering every inch of the pipes, ensuring pipes that are clean and flowing freely.
Our video inspection equipment allows for our technicians to view the internal condition of your pipes and drain systems. We are able to identify and pinpoint specific issues with your drain and sewer clogs, ensuring that every problem is taken care of in an efficient manner.
Our cable and blade machine is like a long metal snake that has several blades attached to the end of it. We can feed the line through your pipes, and the blades scrape off any grease, soap, silt, or other particles that have built up inside. Looking for something other than a residence? We also offer commercial drain services.
Don't let clogged drains slow you down anymore. American Sewer takes pride in being your number one hometown team. Our drain cleaning experts can be there quickly and make sure that the job is completed correctly the first time. We help you keep your drains and septic system working properly.
Not sure if you need an expert? That is why we provide you with some simple steps to help you find a solution before having to call us. Continue reading to learn more.
If your sink already has standing water, a plunger may be your best option. Start by placing the plunger cup over the drain and then plug the overflow hole with your finger or a small towel. Press down with four to five rapid thrusts or until the water starts to flow freely down the drain. You'll know the clog is gone when the sink starts draining quickly.
If the plunger doesn't solve your problem, trying seeing what cleaning solutions and solvents you have around the house. Vinegar and lemon juice are both great home remedies. You can mix Baking soda, salt, or Borax to add some extra strength to the cleaner. Once you have a cleaning solution, begin to pour it into the drain, starting with half a cup. The chemical reaction from the vinegar and dry ingredient will cause a foaming reaction to occur. You want to cover the drain with a cloth for 15-30 minutes, while the solution does it work to loosen and dissolve the clog. Repeat the process at least once more. Now try out your sink and see if your drain is clear!
If the solution has not removed the clog, try using the plunger again. You can fill your tub with hot water to increase the pressure when you plunge. If you think the clog could be in the sinks p-trap, you can remove it and clean it out by hand. Make sure to place a bucket underneath to catch any water. You can then clean the drain trap with a coat hanger or similar metal wire.
Another solution is to purchase or rent a plumber's cable auger. This long, coil wire can be anywhere from 15 to 100ft long and is designed to reach deep into a drain or pipe and clear any clogs. You can safely operate a hand crank models but the electrically powered mechanical cable augers can be very dangerous without proper training.
Slowly feed the cable through the pipes until you come to the clog. At this point, you want to try and push the auger into the clog and twist repeatedly to break apart the clog. Try running water through the pipe to test if the clog has been cleared.
Once you think the clog is removed, pour hot water into the drain to make sure it is draining freely. If none of these home solutions work for you, remember that American Sewer can handle the toughest of situations. Give us a call today to get your drains cleaned.
We use a blade the same diameter of the pipe to first try to clean it out. If that size doesn't work we'll go down a size on the blade to get a hole started and then go back up to the original size afterward. Using a blade with the same diameter of the pipe is important because we strive to get back the original usability the pipe first had. Our goal is to get water fully flowing through the pipe, not just a small hole. If the blades don't work we'll use curved cables to try and get the clog out.
If the blades and cables don't work then we'll move on to water jetting.
If water jetting doesn't work, then we move up to a camera inspection or line locate to specifically pinpoint the problem area. Based on what we discover we will recommend either a drain repair of the trouble area or a re-do of the entire line. Redoing the entire line is called pipe-lining.
We all naturally shed hundreds of hair follicles when taking a shower. And when it comes to clogged drains, Hair is perhaps the guiltiest party. Even grosser, we shed millions of dead skin cells into the drain, every time we shower.
While some will flow through the pipes, issues arise as increasing numbers of these same hairs and dead skin cells stick to the walls of the drain pipes. With enough build up, drains experience water flow blockage or even complete stoppage.
A hair catcher in your drain can buy some time as a temporary solution, but the only real fix is a drain cleaning service. Almost all shower drains will experience a clog because of hair and dead skin cells at one point or another in their life cycle.
Items such as toothpaste caps, razor coverings, shampoo caps, and other small items that may drop are another common culprit of a clogged drain. It is important not to let these items fall into the drain.
Hard water deposits leave all sorts of minerals and microparticles on the walls of your shower drain pipe. Your drain can clog eventually if these small fragments are not removed on a regular basis. A water softening agent can help to avoid and offset the harm caused by hard water.
Soap scum is another common cause of clogged shower drains. Soap scum leaves plenty of residue on the walls of pipes, furthering the likelihood of trapped hairs, skin cells, and other contaminants causing severe drain blockage.
This is an issue that you can take action on initially. Several containers of hot water with a few drops chlorine bleach poured down the drain every other week can serve as a solid remedy.


Goals 4 Sports has designed and is now manufacturing a New G4S Slip & Secure Net Fastener for the Pevo Channel Soccer Goals in a 50 pack. This Slip & Secure Clip Net Fastener has been designed to ensure that your net is securely attached to the Competition, Club, and Futsal Pevo Soccer goals to hold your Soccer Net in place. The G4S Slip and Secure Clip Net Fastener can be used in place of the StayNet & HangIt Net Fasteners.


Sophie Stanbury is based in London and has been bringing her contemporary classic aesthetic to both residential and commercial projects since 2010.
Sophie understands that where you live and where you work are part of your personality. It is this 'you' that she aims to capture when working with clients to create living spaces that are stylish, contemporary and comfortable.
So whether you're looking to transform a London townhouse, create a luxury office or simply shake up your interiors with a light touch, Sophie will deliver a tailor-made and stress-free solution that's perfect for you.
Bright and natural were Sophie's watchwords for this delightful country house. She chose reflective fabrics and surfaces, crystal chandeliers and earthy colours to bring light flooding in, while lots of natural wood and a classic yet contemporary kitchen create a sense of harmony between the new interiors and the rest of the house, as well as the surrounding landscape.
For this new-build on the world-renowned Surrey estate, Sophie opted for modern and minimalist, mixing bright and neutral colours to create an understated sophistication with a touch of glamour.
Sophie understands well the competing requirements of children's rooms. They need to be vibrant and exciting spaces, of course, but not so exciting that they won't get to sleep. She works closely with both children and their parents to create a cosy, calm atmosphere with a wow factor. And with growing children of her own, Sophie knows just how to tweak an interior as children get older, keeping the room age-relevant and, more importantly, the occupants happy.
This room in a London townhouse was designed for the daughter of Sophie's friend, the fashion blogger and fellow Ladies of London star Juliet Angus. With a bespoke Matthew Williamson canopy as the focal point, Sophie carried the soft, feminine feel through the room with clever choices of colour, pattern and texture.
The wallpaper in this twin boys' bedroom ticks all the boxes, being both striking and playful yet also offering a calm uniformity for when it's time for bed. The star theme is reflected and contrasted in a lively rug, while the neutral storage spaces blend cleverly into the background.
Home to a high-end luxury brand, the client wanted their offices in London's Mayfair to reflect the premium nature of their product. Sophie chose dark colours offering gravitas with dynamic graphic prints for the rugs, perfectly matching the brand's position. The slick black lacquer and leather are the ideal complement, while adding variety to the textures and no small amount of sophistication.
This luxury London HQ is bright and sophisticated, sending out precisely the message the client wanted of funky glamour. With the help of spotlights, the yellow of the chairs pops out of the neutral background, and the dark wooden floor and graphic carpet tie the whole ensemble together. Fun elements like the neon 'Be Nice' sign are both funky and humorous, and blend perfectly with the bespoke furniture.
Sophie trained at the Inchbald School of Design in central London, famous, among other things, for being the first interior design school in Europe. It was here that she learned the true importance of attention to detail and began to develop her personal approach to design.
Sophie works closely with top-quality craftsmen and teams of builders, ensuring that every project is built and installed to the very highest standards and with a lasting finish. Her projects are delivered on time and within set budget guidelines.
Sophie can provide a consultation or full package service depending on your needs.
When she is not pouring her creativity into her ongoing design projects, Sophie is often to be seen on television alongside the fun, glamorous fashionistas who are the Ladies of London.
Please contact Sophie in total confidence to discuss your interior design requirements.