text:
"""
@author: moloch
Copyright 2012 Root the Box
Created on Feb 24, 2012

---------
websocket - WebSocket client library for Python

Copyright (C) 2010 Hiroki Ohtani(liris)

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
---------

"""
# pylint: disable=unused-variable

import os
import sys
import json
import uuid
import array
import socket
import ssl
import struct
import base64
import hashlib
import logging
import argparse
import platform
import traceback
import codecs

from builtins import str

try:
    import ConfigParser
except ImportError:
    import configparser as ConfigParser
try:
    from urllib.parse import urlparse
except ImportError:
    from urlparse import urlparse
from datetime import datetime
from hashlib import sha512, sha1
from builtins import range, object, chr

### Settings
__version__ = "0.1.1"
__domain__ = "game.rootthebox.com"
__desc__ = "Root the Box: Botnet"
__port__ = "80"
__path__ = "botnet/connect"

if platform.system().lower() in ["linux", "darwin"]:

    # === Text Colors ===
    W = "\033[0m"  # default/white
    BLA = "\033[30m"  # black
    R = "\033[31m"  # red
    G = "\033[32m"  # green
    O = "\033[33m"  # orange
    BLU = "\033[34m"  # blue
    P = "\033[35m"  # purple
    C = "\033[36m"  # cyan
    GR = "\033[37m"  # gray

    # === Styles ===
    bold = "\033[1m"

else:

    # === Text Colors ===
    W = ""
    BLA = ""
    R = ""
    G = ""
    O = ""
    BLU = ""
    P = ""
    C = ""
    GR = ""

    # === Styles ===
    bold = ""

# === Macros ===
INFO = bold + C + "[*]" + W
WARN = bold + R + "[!]" + W
PROMPT = bold + P + "[?]" + W
current_time = lambda: str(datetime.now()).split(" ")[1].split(".")[0]

"""
websocket python client.
=========================

This version support only hybi-13.
Please see http://tools.ietf.org/html/rfc6455 for protocol.
"""

# websocket supported version.
VERSION = 13

# closing frame status codes.
STATUS_NORMAL = 1000
STATUS_GOING_AWAY = 1001
STATUS_PROTOCOL_ERROR = 1002
STATUS_UNSUPPORTED_DATA_TYPE = 1003
STATUS_STATUS_NOT_AVAILABLE = 1005
STATUS_ABNORMAL_CLOSED = 1006
STATUS_INVALID_PAYLOAD = 1007
STATUS_POLICY_VIOLATION = 1008
STATUS_MESSAGE_TOO_BIG = 1009
STATUS_INVALID_EXTENSION = 1010
STATUS_UNEXPECTED_CONDITION = 1011
STATUS_TLS_HANDSHAKE_ERROR = 1015

logger = logging.getLogger()

class WebSocketException(Exception):
    """
    websocket exception class.
    """

    pass

class WebSocketConnectionClosedException(WebSocketException):
    """
    If remote host closed the connection or some network error happened,
    this exception will be raised.
    """

    pass

default_timeout = None
traceEnabled = False

def enableTrace(tracable):
    """
    turn on/off the tracability.

    tracable: boolean value. if set True, tracability is enabled.
    """
    global traceEnabled
    traceEnabled = tracable
    if tracable:
        if not logger.handlers:
            logger.addHandler(logging.StreamHandler())
        logger.setLevel(logging.DEBUG)

def setdefaulttimeout(timeout):
    """
    Set the global timeout setting to connect.

    timeout: default socket timeout time. This value is second.
    """
    global default_timeout
    default_timeout = timeout

def getdefaulttimeout():
    """
    Return the global timeout setting(second) to connect.
    """
    return default_timeout

def _parse_url(url):
    """
    parse url and the result is tuple of
    (hostname, port, resource path and the flag of secure mode)

    url: url string.
    """
    if ":" not in url:
        raise ValueError("url is invalid")

    scheme, url = url.split(":", 1)

    parsed = urlparse(url, scheme="http")
    if parsed.hostname:
        hostname = parsed.hostname
    else:
        raise ValueError("hostname is invalid")
    port = 0
    if parsed.port:
        port = parsed.port

    is_secure = False
    if scheme == "ws":
        if not port:
            port = 80
    elif scheme == "wss":
        is_secure = True
        if not port:
            port = 443
    else:
        raise ValueError("scheme %s is invalid" % scheme)

    if parsed.path:
        resource = parsed.path
    else:
        resource = "/"

    if parsed.query:
        resource += "?" + parsed.query

    return (hostname, port, resource, is_secure)

def create_connection(url, timeout=None, **options):
    """
    connect to url and return websocket object.

    Connect to url and return the WebSocket object.
    Passing optional timeout parameter will set the timeout on the socket.
    If no timeout is supplied, the global default timeout setting returned by getdefauttimeout() is used.
    You can customize using 'options'.
    If you set "header" dict object, you can set your own custom header.

    >>> conn = create_connection("ws://echo.websocket.org/",
         ...     header=["User-Agent: MyProgram",
         ...             "x-custom: header"])

    timeout: socket timeout time. This value is integer.
             if you set None for this value, it means "use default_timeout value"

    options: current support option is only "header".
             if you set header as dict value, the custom HTTP headers are added.
    """
    sockopt = options.get("sockopt", ())
    websock = WebSocket(sockopt=sockopt)
    websock.settimeout(timeout != None and timeout or default_timeout)
    websock.connect(url, **options)
    return websock

_MAX_INTEGER = (1 << 32) - 1
_AVAILABLE_KEY_CHARS = list(range(0x21, 0x2F + 1)) + list(range(0x3A, 0x7E + 1))
_MAX_CHAR_BYTE = (1 << 8) - 1

# ref. Websocket gets an update, and it breaks stuff.
# http://axod.blogspot.com/2010/06/websocket-gets-update-and-it-breaks.html

def _create_sec_websocket_key():
    uid = uuid.uuid4()
    return decode(base64.encodestring(uid.bytes).strip())

_HEADERS_TO_CHECK = {"upgrade": "websocket", "connection": "upgrade"}

def encode(s, name="utf-8", *args, **kwargs):
    codec = codecs.lookup(name)
    rv, length = codec.encode(s, *args, **kwargs)
    if not isinstance(rv, (str, bytes, bytearray)):
        raise TypeError("Not a string or byte codec")
    return rv

def decode(s, name="utf-8", *args, **kwargs):
    codec = codecs.lookup(name)
    rv, length = codec.decode(s, *args, **kwargs)
    if not isinstance(rv, (str, bytes, bytearray)):
        raise TypeError("Not a string or byte codec")
    return rv

class _SSLSocketWrapper(object):
    def __init__(self, sock):
        self.ssl = ssl.wrap_socket(sock, ssl_version=ssl.PROTOCOL_TLSv1_2)

    def recv(self, bufsize):
        return self.ssl.read(bufsize)

    def send(self, payload):
        return self.ssl.write(payload)

_BOOL_VALUES = (0, 1)

def _is_bool(*values):
    for v in values:
        if v not in _BOOL_VALUES:
            return False

    return True

class ABNF(object):
    """
    ABNF frame class.
    see http://tools.ietf.org/html/rfc5234
    and http://tools.ietf.org/html/rfc6455#section-5.2
    """

    # operation code values.
    OPCODE_TEXT = 0x1
    OPCODE_BINARY = 0x2
    OPCODE_CLOSE = 0x8
    OPCODE_PING = 0x9
    OPCODE_PONG = 0xA

    # available operation code value tuple
    OPCODES = (OPCODE_TEXT, OPCODE_BINARY, OPCODE_CLOSE, OPCODE_PING, OPCODE_PONG)

    # opcode human readable string
    OPCODE_MAP = {
        OPCODE_TEXT: "text",
        OPCODE_BINARY: "binary",
        OPCODE_CLOSE: "close",
        OPCODE_PING: "ping",
        OPCODE_PONG: "pong",
    }

    # data length threshold.
    LENGTH_7 = 0x7D
    LENGTH_16 = 1 << 16
    LENGTH_63 = 1 << 63

    def __init__(
        self, fin=0, rsv1=0, rsv2=0, rsv3=0, opcode=OPCODE_TEXT, mask=1, data=""
    ):
        """
        Constructor for ABNF.
        please check RFC for arguments.
        """
        self.fin = fin
        self.rsv1 = rsv1
        self.rsv2 = rsv2
        self.rsv3 = rsv3
        self.opcode = opcode
        self.mask = mask
        self.data = data
        self.get_mask_key = os.urandom

    @staticmethod
    def create_frame(data, opcode):
        """
        create frame to send text, binary and other data.

        data: data to send. This is string value(byte array).
            if opcode is OPCODE_TEXT and this value is uniocde,
            data value is converted into unicode string, automatically.

        opcode: operation code. please see OPCODE_XXX.
        """
        if opcode == ABNF.OPCODE_TEXT and isinstance(data, str):
            data = data
        # mask must be set if send data from client
        return ABNF(1, 0, 0, 0, opcode, 1, data)

    def format(self):
        """
        format this object to string(byte array) to send data to server.
        """
        if not _is_bool(self.fin, self.rsv1, self.rsv2, self.rsv3):
            raise ValueError("not 0 or 1")
        if self.opcode not in ABNF.OPCODES:
            raise ValueError("Invalid OPCODE")
        length = len(self.data)
        if length >= ABNF.LENGTH_63:
            raise ValueError("data is too long")
        frame_header = struct.pack(
            "B",
            self.fin << 7
            | self.rsv1 << 6
            | self.rsv2 << 5
            | self.rsv3 << 4
            | self.opcode,
        )
        if length < ABNF.LENGTH_7:
            frame_header += struct.pack("B", self.mask << 7 | length)
        elif length < ABNF.LENGTH_16:
            frame_header += struct.pack("B", self.mask << 7 | 0x7E)
            frame_header += struct.pack("!H", length)
        else:
            frame_header += struct.pack("B", self.mask << 7 | 0x7F)
            frame_header += struct.pack("!Q", length)
        if not self.mask:
            return frame_header + encode(self.data)
        else:
            mask_key = self.get_mask_key(4)
            return frame_header + self._get_masked(mask_key)

    def _get_masked(self, mask_key):
        mask = ABNF.mask_data(mask_key, self.data)
        return mask_key + mask

    @staticmethod
    def mask_data(mask_key, data):
        """
        mask or unmask data. Just do xor for each byte

        mask_key: 4 byte string(byte).

        data: data to mask/unmask.
        """
        _m = array.array("B", mask_key)
        _d = array.array("B", encode(data))
        for i in range(len(_d)):
            _d[i] ^= _m[i % 4]
        return _d.tostring()

class WebSocket(object):
    """
    Low level WebSocket interface.
    This class is based on
      The WebSocket protocol draft-hixie-thewebsocketprotocol-76
      http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76

    We can connect to the websocket server and send/receive data.
    The following example is a echo client.

    >>> import websocket
    >>> ws = websocket.WebSocket()
    >>> ws.connect("ws://echo.websocket.org")
    >>> ws.send("Hello, Server")
    >>> ws.recv()
    'Hello, Server'
    >>> ws.close()

    get_mask_key: a callable to produce new mask keys, see the set_mask_key
      function's docstring for more details
    sockopt: values for socket.setsockopt.
        sockopt must be tuple and each element is argument of sock.setscokopt.
    """

    def __init__(self, get_mask_key=None, sockopt=()):
        """
        Initialize WebSocket object.
        """
        self.connected = False
        self.io_sock = self.sock = socket.socket()
        for opts in sockopt:
            self.sock.setsockopt(*opts)
        self.get_mask_key = get_mask_key

    def set_mask_key(self, func):
        """
        set function to create musk key. You can custumize mask key generator.
        Mainly, this is for testing purpose.

        func: callable object. the fuct must 1 argument as integer.
              The argument means length of mask key.
              This func must be return string(byte array),
              which length is argument specified.
        """
        self.get_mask_key = func

    def settimeout(self, timeout):
        """
        Set the timeout to the websocket.

        timeout: timeout time(second).
        """
        self.sock.settimeout(timeout)

    def gettimeout(self):
        """
        Get the websocket timeout(second).
        """
        return self.sock.gettimeout()

    def connect(self, url, **options):
        """
        Connect to url. url is websocket url scheme. ie. ws://host:port/resource
        You can customize using 'options'.
        If you set "header" dict object, you can set your own custom header.

        >>> ws = WebSocket()
        >>> ws.connect("ws://echo.websocket.org/",
                ...     header={"User-Agent: MyProgram",
                ...             "x-custom: header"})

        timeout: socket timeout time. This value is integer.
                 if you set None for this value,
                 it means "use default_timeout value"

        options: current support option is only "header".
                 if you set header as dict value,
                 the custom HTTP headers are added.

        """
        hostname, port, resource, is_secure = _parse_url(url)
        # TODO: we need to support proxy
        self.sock.connect((hostname, port))
        if is_secure:
            self.io_sock = _SSLSocketWrapper(self.sock)
        self._handshake(hostname, port, resource, **options)

    def _handshake(self, host, port, resource, **options):
        sock = self.io_sock
        headers = []
        headers.append("GET %s HTTP/1.1" % resource)
        headers.append("Upgrade: websocket")
        headers.append("Connection: Upgrade")
        if port == 80:
            hostport = host
        else:
            hostport = "%s:%d" % (host, port)
        headers.append("Host: %s" % hostport)

        if "origin" in options:
            headers.append("Origin: %s" % options["origin"])
        else:
            headers.append("Origin: http://%s" % hostport)

        key = _create_sec_websocket_key()
        headers.append("Sec-WebSocket-Key: %s" % key)
        headers.append("Sec-WebSocket-Version: %s" % VERSION)
        if "header" in options:
            headers.extend(options["header"])

        headers.append("")
        headers.append("")

        header_str = encode("\r\n".join(headers), "utf-8")
        sock.send(header_str)
        if traceEnabled:
            logger.debug("--- request header ---")
            logger.debug(decode(header_str))
            logger.debug("-----------------------")

        status, resp_headers = self._read_headers()
        if status != 101:
            self.close()
            raise WebSocketException("Handshake Status %d" % status)

        success = self._validate_header(resp_headers, key)
        if not success:
            self.close()
            raise WebSocketException("Invalid WebSocket Header")

        self.connected = True

    def _validate_header(self, headers, key):
        for k, v in list(_HEADERS_TO_CHECK.items()):
            r = headers.get(k, None)
            if not r:
                return False
            r = r.lower()
            if v != r:
                return False

        result = headers.get("sec-websocket-accept", None)
        if not result:
            return False
        result = result.lower()

        value = key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
        hashed = decode(
            base64.encodestring(hashlib.sha1(encode(value)).digest()).strip().lower()
        )
        return hashed == result

    def _read_headers(self):
        status = None
        headers = {}
        if traceEnabled:
            logger.debug("--- response header ---")

        while True:
            line = self._recv_line()
            if line == "\r\n":
                break
            line = line.strip()
            if traceEnabled:
                logger.debug(line)
            if not status:
                status_info = line.split(" ", 2)
                status = int(status_info[1])
            else:
                kv = line.split(":", 1)
                if len(kv) == 2:
                    key, value = kv
                    headers[key.lower()] = value.strip().lower()
                else:
                    raise WebSocketException("Invalid header")

        if traceEnabled:
            logger.debug("-----------------------")

        return status, headers

    def send(self, payload, opcode=ABNF.OPCODE_TEXT):
        """
        Send the data as string.

        payload: Payload must be utf-8 string or unicoce,
                  if the opcode is OPCODE_TEXT.
                  Otherwise, it must be string(byte array)

        opcode: operation code to send. Please see OPCODE_XXX.
        """
        if traceEnabled:
            logger.debug("send: " + repr(payload))
        frame = ABNF.create_frame(payload, opcode)
        if self.get_mask_key:
            frame.get_mask_key = self.get_mask_key
        data = frame.format()
        while data:
            l = self.io_sock.send(data)
            data = data[l:]

    def ping(self, payload=""):
        """
        send ping data.

        payload: data payload to send server.
        """
        self.send(payload, ABNF.OPCODE_PING)

    def pong(self, payload):
        """
        send pong data.

        payload: data payload to send server.
        """
        self.send(payload, ABNF.OPCODE_PONG)

    def recv(self):
        """
        Receive string data(byte array) from the server.

        return value: string(byte array) value.
        """
        opcode, data = self.recv_data()
        return data

    def recv_data(self):
        """
        Receive data with operation code.

        return  value: tuple of operation code and string(byte array) value.
        """
        while True:
            frame = self.recv_frame()
            if not frame:
                # handle error:
                # 'NoneType' object has no attribute 'opcode'
                raise WebSocketException("Not a valid frame %s" % frame)
            elif frame.opcode in (ABNF.OPCODE_TEXT, ABNF.OPCODE_BINARY):
                return (frame.opcode, frame.data)
            elif frame.opcode == ABNF.OPCODE_CLOSE:
                self.send_close()
                return (frame.opcode, None)
            elif frame.opcode == ABNF.OPCODE_PING:
                self.pong(frame.data)

    def recv_frame(self):
        """
        Receive data as frame from server.

        return value: ABNF frame object.
        """
        header_bytes = self._recv_strict(2)
        if not header_bytes:
            return None
        if isinstance(header_bytes[0], int):
            b1 = header_bytes[0]
        else:
            b1 = ord(header_bytes[0])
        fin = b1 >> 7 & 1
        rsv1 = b1 >> 6 & 1
        rsv2 = b1 >> 5 & 1
        rsv3 = b1 >> 4 & 1
        opcode = b1 & 0xF
        if isinstance(header_bytes[1], int):
            b2 = header_bytes[1]
        else:
            b2 = ord(header_bytes[1])
        mask = b2 >> 7 & 1
        length = b2 & 0x7F

        length_data = ""
        if length == 0x7E:
            length_data = self._recv_strict(2)
            length = struct.unpack("!H", length_data)[0]
        elif length == 0x7F:
            length_data = self._recv_strict(8)
            length = struct.unpack("!Q", length_data)[0]

        mask_key = ""
        if mask:
            mask_key = self._recv_strict(4)
        data = self._recv_strict(length)

        if traceEnabled:
            received = header_bytes + encode(length_data) + encode(mask_key) + data
            logger.debug("recv: " + repr(received))

        if mask:
            data = ABNF.mask_data(mask_key, data)

        frame = ABNF(fin, rsv1, rsv2, rsv3, opcode, mask, data)
        return frame

    def send_close(self, status=STATUS_NORMAL, reason=""):
        """
        send close data to the server.

        status: status code to send. see STATUS_XXX.

        reason: the reason to close. This must be string.
        """
        if status < 0 or status >= ABNF.LENGTH_16:
            raise ValueError("code is invalid range")
        self.send("%s%s" % (struct.pack("!H", status), reason), ABNF.OPCODE_CLOSE)

    def close(self, status=STATUS_NORMAL, reason=""):
        """
        Close Websocket object

        status: status code to send. see STATUS_XXX.

        reason: the reason to close. This must be string.
        """
        if self.connected:
            if status < 0 or status >= ABNF.LENGTH_16:
                raise ValueError("code is invalid range")

            try:
                self.send(struct.pack("!H", status) + reason, ABNF.OPCODE_CLOSE)
                timeout = self.sock.gettimeout()
                self.sock.settimeout(3)
                try:
                    frame = self.recv_frame()
                    if logger.isEnabledFor(logging.ERROR):
                        recv_status = struct.unpack("!H", frame.data)[0]
                        if recv_status != STATUS_NORMAL:
                            logger.error("close status: " + repr(recv_status))
                except:
                    pass
                self.sock.settimeout(timeout)
                self.sock.shutdown(socket.SHUT_RDWR)
            except:
                pass
        self._closeInternal()

    def _closeInternal(self):
        self.connected = False
        self.sock.close()
        self.io_sock = self.sock

    def _recv(self, bufsize):
        bytes_val = self.io_sock.recv(bufsize)
        if not bytes_val:
            raise WebSocketConnectionClosedException()
        return bytes_val

    def _recv_strict(self, bufsize):
        remaining = bufsize
        bytes_val = b""
        while remaining:
            bytes_val += self._recv(remaining)
            remaining = bufsize - len(bytes_val)
        return bytes_val

    def _recv_line(self):
        line = []
        while True:
            c = decode(self._recv(1))
            line.append(c)
            if c == "\n":
                break
        return "".join(line)

class WebSocketApp(object):
    """
    Higher level of APIs are provided.
    The interface is like JavaScript WebSocket object.
    """

    def __init__(
        self,
        url,
        header=[],
        on_open=None,
        on_message=None,
        on_error=None,
        on_close=None,
        keep_running=True,
        get_mask_key=None,
        sockopt=(),
    ):
        """
         url: websocket url.
         header: custom header for websocket handshake.
         on_open: callable object which is called at opening websocket.
           this function has one argument. The argument is this class object.
         on_message: callbale object which is called when received data.
          on_message has 2 arguments.
          The 1st argument is this class object.
          The passing 2nd argument is utf-8 string which we get from the server.
        on_error: callable object which is called when we get error.
          on_error has 2 arguments.
          The 1st argument is this class object.
          The passing 2nd argument is exception object.
        on_close: callable object which is called when closed the connection.
          this function has one argument. The argument is this class object.
        keep_running: a boolean flag indicating whether the app's main loop should
          keep running, defaults to True
        get_mask_key: a callable to produce new mask keys, see the WebSocket.set_mask_key's
          docstring for more information
        """
        self.url = url
        self.header = header
        self.on_open = on_open
        self.on_message = on_message
        self.on_error = on_error
        self.on_close = on_close
        self.keep_running = keep_running
        self.get_mask_key = get_mask_key
        self.sock = None

    def send(self, data, opcode=ABNF.OPCODE_TEXT):
        """
        send message.
        data: message to send. If you set opcode to OPCODE_TEXT, data must be utf-8 string or unicode.
        opcode: operation code of data. default is OPCODE_TEXT.
        """
        if self.sock.send(data, opcode) == 0:
            raise WebSocketConnectionClosedException()

    def close(self):
        """
        close websocket connection.
        """
        self.keep_running = False
        self.sock.close()

    def run_forever(self, sockopt=()):
        """
        run event loop for WebSocket framework.
        This loop is infinite loop and is alive during websocket is available.
        sockopt: values for socket.setsockopt.
            sockopt must be tuple and each element is argument of sock.setscokopt.
        """
        if self.sock:
            raise WebSocketException("socket is already opened")
        try:
            self.sock = WebSocket(self.get_mask_key, sockopt=sockopt)
            self.sock.connect(self.url, header=self.header)
            self._run_with_no_err(self.on_open)
            while self.keep_running:
                data = self.sock.recv()
                if data is None:
                    break
                self._run_with_no_err(self.on_message, data)
        except Exception as e:
            self._run_with_no_err(self.on_error, e)
        finally:
            self.sock.close()
            self._run_with_no_err(self.on_close)
            self.sock = None

    def _run_with_no_err(self, callback, *args):
        if callback:
            try:
                callback(self, *args)
            except Exception as e:
                if logger.isEnabledFor(logging.DEBUG):
                    logger.error(e)

#############################################################################################
### [ Messages ] ############################################################################
#############################################################################################

def display_error(ws, response, verbose=False):
    msg = response["message"] if "message" in response else response["error"]
    sys.stderr.write("\n%s %s Error  : %s" % (WARN, current_time(), msg))
    if (ws is not None and ws.verbose) or verbose:
        sys.stderr.write("\n")
        traceback.print_exc(file=sys.stderr)
    sys.stderr.flush()

def display_status(ws, response, verbose=False):
    sys.stdout.write(chr(27) + "[2K" + "\r")
    sys.stdout.write("%s %s Status : %s " % (INFO, current_time(), response["message"]))
    if (ws is not None and ws.verbose) or verbose:
        sys.stdout.write("\n")
    sys.stdout.flush()

def get_response_xid(garbage, xid):
    round1 = encode(sha512(encode(xid + garbage)).hexdigest())
    print("Garbage: " + garbage)
    print("XID :" + xid)
    print("[*] Return: " + str(sha512(round1).hexdigest()))
    return sha512(round1).hexdigest()

def send_interrogation_response(ws, response):
    display_status(ws, {"message": "Authorizing, please wait ..."})
    solved_xid = {
        "opcode": "interrogation_response",
        "response_xid": get_response_xid(ws.garbage, response["xid"]),
        "box_name": decode(ws.box_name),
        "handle": ws.user,
    }
    ws.send(json.dumps(solved_xid))

def recv_ping(ws, response, verbose=False):
    """Print that we just got a ping from c&c"""
    sys.stdout.write(chr(27) + "[2K" + "\r")
    sys.stdout.write(
        INFO + " %s  Ping  : Received a ping from command & control" % current_time()
    )
    if (ws is not None and ws.verbose) or verbose:
        sys.stdout.write("\n")
    sys.stdout.flush()

opcodes = {
    "error": display_error,
    "status": display_status,
    "interrogate": send_interrogation_response,
    "ping": recv_ping,
}

def on_open(ws):
    display_status(ws, {"message": "Successfully connected to command & control ..."})

def on_message(ws, message):
    """Parse message and call a function"""
    try:
        response = json.loads(message)
        if "opcode" not in response:
            raise ValueError("Missing opcode")
        elif response["opcode"] not in opcodes:
            raise ValueError("Invalid opcode")
        else:
            opcodes[response["opcode"]](ws, response)
    except ValueError as error:
        display_error(ws, {"error": str(error)})

def on_error(ws, error):
    display_error(ws, {"error": str(error)})

def on_close(ws):
    display_error(ws, {"error": "Disconnected from command & control\n"})

def get_default_garbage():
    return (
        "/root/garbage"
        if platform.system().lower() in ["linux", "darwin"]
        else "C:\\garbage"
    )

def main(domain, port, user, garbage_path, secure, verbose):
    """Main()"""
    garbage_cfg = ConfigParser.SafeConfigParser()
    if garbage_path is None:
        garbage_path = get_default_garbage()
    if not os.path.exists(garbage_path):
        print(WARN + " Garbage file not found %s" % garbage_path)
        os._exit(1)
    fp = open(garbage_path, "r")
    try:
        garbage_cfg.readfp(fp)
    except:
        print(WARN + " Garbage file is not properly formatted")
        os._exit(2)
    try:
        enableTrace(verbose)
        connection_url = "ws://%s:%s/%s" % (domain, port, __path__)
        display_status(
            None, {"message": "Connecting to: %s" % connection_url}, verbose=verbose
        )
        ws = WebSocketApp(
            connection_url, on_message=on_message, on_error=on_error, on_close=on_close
        )
        ws.verbose = verbose
        ws.garbage = garbage_cfg.get("Bot", "garbage")
        ws.box_name = decode(garbage_cfg.get("Bot", "name"), "hex")
        ws.user = user
        ws.on_open = on_open
        ws.run_forever()
    except KeyboardInterrupt:
        os._exit(0)
    except Exception as error:
        display_error(None, {"error": str(error)})
        os._exit(1)

##############################################################################
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description=__desc__)
    parser.add_argument(
        "--version", action="version", version="%(prog)s v" + __version__
    )
    parser.add_argument(
        "--verbose",
        "-v",
        help="display verbose output (default: false)",
        action="store_true",
        dest="verbose",
    )
    parser.add_argument(
        "--secure",
        "-s",
        help="connect using a secure socket (default: false)",
        action="store_true",
        dest="secure",
    )
    parser.add_argument(
        "--garbage",
        "-g",
        help="path to garbage file (default: /root/garbage or C:\\garbage)",
        dest="garbage",
    )
    parser.add_argument(
        "--domain",
        "-d",
        help="scoring engine ip address, or domain (default: %s)" % __domain__,
        default=__domain__,
        dest="domain",
    )
    parser.add_argument(
        "--port",
        "-p",
        help="netork port to connect to (default: %s)" % __port__,
        default=__port__,
        dest="port",
    )
    parser.add_argument(
        "--user",
        "-u",
        help="your handle (scoring engine account name)",
        required=True,
        dest="handle",
    )
    args = parser.parse_args()
    main(args.domain, args.port, args.handle, args.garbage, args.secure, args.verbose)

redpajama_set_name: RedPajamaGithub


text:
Tales from Virdura: Runt Wizard
Young Solon stared stoically ahead as two of his tormentors held him down, and a third ripped off his shirt from behind.
He gritted his teeth as the thin reed stung his naked back. And a second time. And a third.
Solon vowed that he would not cry out. He was the son of the Royal Wizard, and he would carry himself as such.
Three other children danced around him, snorting like pigs and calling him names.
"Foolborn runt!" they chanted. "Where is your all-powerful magic now?"
The mocking continued, and the lashings went on. Seven now, and Solon could feel blood trickling down his back. He focused on the smell of the boys' sweat, mixed in with the dust of the dry, arid field they were in. Despite himself, a single tear ran down his left cheek.
"Oh, he's a cry-baby now too, eh?" said one of the boys. "Pathetic bastard son of a useless mage."
Something inside Solon snapped. His eyes shot open, and under his breath, he began reciting an old incantation.
Another thwack of the reed.
"What's he doing now, do you think?"
"Speaking gibberish. I think we may have beaten him a little too hard, boys."
While his tormentors laughed, nobody noticed the storm clouds gathering overhead. Nobody paid any attention to the flash of lightning, and clap of thunder indicating how close it was.
Above a boy's head (the one who had insulted Solon's father), the sky crackled, and a blue bolt began to take shape, high up in the clouds.
The lightning bolt dissipated, and the clouds began to clear. Only then did the boys look up, noticing the sudden sunlight pouring down on them.
The boy who had been holding the switch turned.
"It's the Royal Wizard. Run everyone!"
Within the space of a few heartbeats, everyone was gone. Everyone, that is, except Solon, who was lying face-down in the dust.
His father walked up to him, knelt down and gently grabbed his upper arm.
"Come, my son. It is all right now. They have gone."
Solon allowed this father to help him to his feet, wincing at the pain in his back. The old man produced a handkerchief out of a pocket in his robe and gently dabbed his son's cheek, drying up his tears.
"My son," said the old man, as he looked down at his boy's eyes and smiled sweetly. "I am sorry that you had to go through that. We wizards have always had a difficult time fitting in with our peers."
"But father, why? I just want to be a normal child."
"Because we are different, my son. And people are afraid of people who are different."
"They didn't look very afraid to me!" said Solon. His voice broke a little in anger as he said it, and his hands balled into fists.
"Solon, calm down." Said his father, curtly.
Solon took a step back, shocked at the sudden change in his father's tone.
The old man sighed, deliberately softened his tone, and continued: "You showed great resilience today, and for that I am proud of you. But you almost did something unthinkable. Something that you would've regretted for the rest of your life."
Solon snapped at his father, his voice now a high pitch. "And what would've been wrong with that? I just wanted to teach them all a lesson. I wasn't going to kill anyone. What was the harm in a little lightning storm?"
"But you could have killed people, boy. Perhaps even yourself! I have told you how dangerous and unpredictable magic can be. You are still young, and don't know how to use it properly. But even I, with all my years of training and practice, would balk at attempting what you were trying to do. It is simply too dangerous. Magic should…"
"Magic should only be performed in a calm, private environment, surrounded by the proper tomes and the proper focus," finished Solon, reciting the mantra that had been drummed into his head since before he could talk.
Solon's father smiled. He looked at his son, put both hands on his shoulders, and said, "My son, you are going to make a great wizard, one day. Greater perhaps than even I. But I fear you still have a lot to learn."
Labels: Free Writing
Crossword Puzzle - November 2015
Crossword Puzzle - October 2015 Answers
Book Review: Bloodstone by Helen C. Johannes

redpajama_set_name: RedPajamaCommonCrawl


text:
St John's Smith Square announces its 2017/18 season
By The Cross-Eyed Pianist | June 19, 2017
On 19 June 2017, St John's Smith Square announced its 2017/18 Season.
In a characteristic programme, punctuated by a range of Festival celebrations, St John's Smith Square continues its core mission to provide a home for Baroque music within the UK's only concert hall dating from the Baroque period while equally championing new music. International artists sit comfortably alongside emerging talent and St John's Smith Square also continues to provide a vital and unique central London home for the best in community music.
Festivals at St John's Smith Square
This season, St John's Smith Square presents seven festivals, each with their own distinct identity, featuring the highest calibre artists and repertoire as expected of its renowned programming approach.
The 32nd Annual Christmas Festival curated by Stephen Layton (9 – 23 December 2017) includes concerts with regular favourites Ex Cathedra, The Tallis Scholars, Solomon's Knot, the choirs of Clare College Cambridge, Trinity College Cambridge, Christ Church Cathedral Choir Oxford, King's College London, City of London Choir, the National Youth Music Theatre, Polyphony and the Orchestra of the Age of Enlightenment. New to the Festival this year are Vox Luminis and the London Choral Sinfonia. A very special bonus for December will be organ curator David Titterington's marathon undertaking to perform the organ works of JS Bach on the magnificent Klais organ at St John's Smith Square. The Bach in Advent series comprises daily recitals, usually at 6.00pm, from 3 – 23 December 2017, and these will be open to all, free of charge.
The Holy Week Festival (26 March – 1 April 2018) returns after the huge success of the inaugural festival in 2017. Curated by Nigel Short and Tenebrae and featuring a mix of ticketed concerts and free late-night liturgical events, St John's Smith Square will once again resound with choral music for Passiontide. Artists include Tenebrae, Polyphony, the Britten Sinfonia, Gabrieli, Skylark (from the USA), Aurora Orchestra, Ex Cathedra and The Tallis Scholars.
The London Festival of Baroque Music (11 – 19 May 2018) will have a French theme. In this, the 34th Festival since it was originally launched as the Lufthansa Festival of Baroque Music in 1984, the LFBM commences its new system of working with different Guest Artistic Directors for each festival. To develop the French theme, the Guest Artistic Director for 2018 is the conductor Sébastien Daucé who will be bringing his own Ensemble Correspondances for a staged setting of Charpentier's Histoires sacrèes (17 May 2018). The Festival will also celebrate the 350th anniversary of the birth of Couperin.
Following the 'taster day' in May 2017, Rolf Hind and friends will return for the iconoclastic Occupy the Pianos festival (19 – 22 April 2018). The growing stable of pianistic trailblazers will be joined by percussion, voice, film and elements of theatre in an exploration of the two broad subjects of Nature and Technology. The festival will also feature a performance of Sir Peter Maxwell Davies' ground-breaking Eight Songs for a Mad King.
The Brook Street Band (and friends) lead a weekend Festival in February (23 – 25 February 2018) exploring the varied musical styles that informed and shaped the composer Georg Muffat. The Band will explore his legacy in the form of chamber and orchestral music by composers including Bach and Handel, with four concerts (plus a dance-music workshop and illustrated pre-concert talks) providing a comprehensive musical survey, as well as a natural ebb and flow in terms of mood and scale, small chamber versus orchestral line-ups, and art music versus dance music. Concerts include music from Muffat's Armonico Tributo as well as a selection from the two volumes of Muffat's ground-breaking Florilegium
Also in February, St John's Smith Square welcomes back the Principal Sound Festival (16 – 18 February 2018), which this year will focus on the music of Luigi Nono, alongside works by Rebecca Saunders, György Kurtág, Claudia Molitor and, once again, Morton Feldman. Artists featured include Exaudi, Explore Ensemble, the Bozzini Quartet, Siwan Rhys, George Barton and Jenni Hogan.
Americana '18
Throughout the calendar year of 2018, St John's Smith Square celebrates music from America in a series of concerts curated by the conductor David Wordsworth. Highlights include a celebration of Stephen Montague's 75th birthday (9 March 2018) with a day of events including his complete works for keyboards and the London premieres of a number of his concertos. There will be a whole day of events, stretching for 13 hours (to represent the 13 stripes of the Stars and Stripes flag) on Independence Day (4 July 2018) and in Autumn 2018, there will be a focussed festival of American music.
Other features of Americana '18 include the Carducci Quartet playing Philip Glass (23 March 2018), the London Chorus with Bernstein's Chichester Psalms, celebrating the centenary of Bernstein's birth (8 March 2018) and Orchestra Nova in a programme that includes the complete chamber version of Copland's Appalachian Spring (22 May 2018). The pianist Zubin Kanga will give a concert of music by Terry Riley and John Adams among others (9 February 2018) and the Crouch End Festival Chorus will collaborate with the Brodsky Quartet in a programme including music by Randall Thompson, Copland and the Barber Adagio (10 February 2018). For everyone, there is an opportunity to 'Come and Sing the Bernstein Musicals' (17 March 2018).
Period Instrument Performance
Period instrument performance is always at the forefront of St John's Smith Square's programme. La Nuova Musica and The Holst Singers, both familiar to St John's Smith Square audiences, collaborate for the first time in a programme of Handel and Mozart (13 November 2017).
London Bach Society make their contribution to the 500th anniversary of the Reformation with a concert which brings together the Steinitz Bach Players and Tenebrae under the direction of Nigel Short (30 October 2017). St John's Smith Square continues marking the Reformation's anniversary when Gabrieli and Paul McCreesh return with their recreation of a 17th century Lutheran Christmas morning (7 December 2017)
Following their debut performance back in April, the Armonico Consort and Baroque Orchestra with Christopher Monks will give a performance of Monteverdi's Vespers of 1610 (4 October 2017), continuing the celebrations of the 450th anniversary of Monteverdi's birth.
The young conductor, Joel Sandelson, brings his period instrument orchestra Wond'rous Machine for a concert of Corelli, Purcell and Lully (28 October 2017) and soprano Anna Dennis will give a concert of Purcell songs with Sounds Baroque directed by Julian Perkins (19 January 2018).
The European Day of Early Music (21 March 2018) will be celebrated at St John's Smith Square with a performance in collaboration with the London Handel Festival, and there will be more Handelian celebrations when Stephen Layton directs a concert with Florilegium, soprano Mary Bevan and countertenor Tim Mead (27 February 2018).
Opera always plays a significant role in St John's Smith Square's calendar. Bampton Classical Opera continue to champion the work of Salieri (12 September 2017), this time with his The School of Jealousy, a work that almost certainly inspired Da Ponte and Mozart to create Cosi fan tutte. Later in the season Bampton return to give a programme illustrating the life of the legendary singer Nancy Storace (7 March 2018) marking the bicentenary of her death.
In October there is a chance to hear the opera stars of the future when St John's Smith Square hosts the final of The Voice of Black Opera Competition (3 October 2018) featuring six young singers accompanied by the City of London Sinfonia , conducted by Kwamé Ryan. There is a further showcase opportunity when Irish Heritage Opera visit to celebrate 44 years of bringing Irish operatic talent to the stage (12 April 2018).
La Nuova Musica return with Handel's Orlando (1 February 2018), the start of an annual cycle of Handel operas at St John's Smith Square. There is more Handel in April when Christian Curnyn and the Early Opera Company return with Giulio Cesare (11 April 2018). Further opera can be found during the London Festival of Baroque Music when La Nuova Musica return with Iestyn Davies in the title role of Gluck's Orfeo (13 May 2018).
Moving on from the baroque period, Kensington Symphony Orchestra present Puccini's La Bohème conducted by their music director Russell Keable (21 May 2018).
Orchestral Performances
St John's Smith Square enjoys close relationships with many of the UK's top orchestras. The London Mozart Players and Howard Shelley's innovative explorations of great piano concertos this season features works by Schumann, Saint-Saëns, Mendelssohn, Shostakovich and Grieg whilst the Orchestra of St John's continues its My Music series with celebrity guests including Sir Simon Jenkins, Lord Archer and Lord Hague.
As part of the Southbank Centre's Belief and Beyond Belief series Matthew Barley leads a performance of Sir John Tavener's The Protecting Veil with the City of London Sinfonia (2 December 2017).
Orchestra Vitae return with an intimate programme of Mozart and David Lang which will be presented 'in the round' (7 November 2017) and then in the spring with a programme within the Americana '18 season including Copland's Third Symphony and the Gershwin Piano Concerto (2 March 2018). Another classic American Third Symphony, this time by Ives, is featured in a programme marking the return of the English Symphony Orchestra which also includes the Copland Clarinet Concerto, Piston's rarely performed Sinfonietta and a newly commissioned work from Jesse Jones (18 April 2018).
In Spring 2018, St John's Smith Square welcomes the European Union Chamber Orchestra for a programme of Haydn and Mozart (21 February 2018).
The Young Musicians Symphony Orchestra have five concerts this season, and the Kensington Symphony Orchestra once more brings its unique programming style to St John's Smith Square in its 17/18 concert series. The Royal Orchestral Society and the Salomon Orchestra also return to St John's Smith Square for regular concerts including a performance of the Berg Violin Concerto with violinist Ben Baker and Schmidt's Symphony No. 4 conducted by Holly Mathieson (16 October 2017).
Choral and Vocal Music
Given the outstanding acoustics at St John's Smith Square, many choral societies return year after year and 2017/18 is no exception with performances of Elgar's The Dream of Gerontius given by the 1885 Singers and Orchestra and the Malvern Festival Chorus (14 October 2017), Brahms's A German Requiem with The London Chorus (11 November 2017), Islington Choral Society (18 March 2018) and the Anton Bruckner Choir (28 April 2018), Stravinsky's Symphony of Psalms and Vaughan Williams's A Sea Symphony with Twickenham Choral Society (8 July 2018), Handel's Joshua with the Whitehall Choir (17 November 2017) and Haydn's The Creation with Vox Cordis with the Orchestra of St Paul's (21 November 2018).
As part of the Southbank Centre's Belief and Beyond Belief festival St John's Smith Square is delighted to once again welcome The Cardinall's Musick with a programme of music from the 16th Century to present day. The English Baroque Choir celebrates its 40th birthday with a performance of Bach's Mass in B minor (24 March 2018) and the London Choral Sinfonia return with a programme that places music by James MacMillan, Eric Whitacre and Morten Lauridsen around the Requiem of John Rutter (22 February 2018)
New Music and Emerging Talent
The celebration of new music has always been central to the programming at St John's Smith Square and this season is no exception. Among those whose works will receive premieres at St John's Smith Square in 17/18 are Gregory Rose, Sally Beamish, Alexandra Harwood, Hanna Kulenty, Patrick Brennan, Khyam Allami, Nimrod Borenstein, Owain Park, Arlene Sierra, Kareem Roustom and Jesse Jones.
The highly praised Young Artists' Scheme at St John's Smith Square enters a fifth season with three extraordinary talents. The Bukolika Piano Trio present music by Boulanger, Hanna Kulenty, Messiaen, Górecki and Panufnik alongside more familiar works by Beethoven and Dvořák; the violinist Mathilde Milwidsky performs music by Arvo Pärt, Janáček, Clara Schumann, Grieg and Richard Strauss, while the piano and percussion duo of Siwan Rhys and George Barton offer programmes including music by Vinko Globokar, Kagel, Cage, Feldman and Sir Harrison Birtwistle. All three Young Artists will be showcased as part of a special concert (17 September 2017) within Open House London.
Regular Concert Series & Chamber Music
St John's Smith Square hosts its regular Thursday Lunchtime Concerts, which feature, among others: Yeomen from The Musicians' Company; prize-winners from the Oxford Lieder Festival; performances from St John's Smith Square's Young Artists 17/18; artists featured at the Dartington International Summer School and a monthly organ recital series programmed by St John's Smith Square's organ curator, David Titterington. Particular highlights of the lunchtime series include the Pettman Ensemble with Stephen De Pledge and guest violinist Clio Gould (7 September 2017), the chamber choir Siglo de Oro (9 November 2017), the Duke Quartet (1 February 2018) and the violinist Daniel Pioro (22 March 2018).
The Sunday at St John's programme, in its fourth year, once again includes a number of mini-series within it. Returning artists include I Muscanti and Leon Bosch who will give a series of concerts juxtaposing Russian chamber music with premieres by the composer Alexandra Harwood. Lucy Parham also returns with her Sheaffer Sundays 'Composers in Love' concert series featuring well-known actors such as Harriet Walter, Tim McInnerny, Patricia Hodge and Simon Russell Beale.
The Revolutionary Drawing Room reaches the Razumovsky Quartets as it enters the second year of the complete Beethoven Quartets cycle (concluding in the 2018/19 season) and the pianist Julian Jacobson gives four concerts in his 70th birthday year that bring together masterpieces by Schubert, Beethoven and Prokofiev. Deniz Gelenbe and friends give two concerts of romantic chamber music while Ensemble de Note makes its St John's Smith Square debut with a series of early classical chamber music performances. The Prince Regent's Band will give a fascinating programme of 19th century band music (5 November 2017) and the soprano Elin Manahan Thomas together with Elizabeth Kenny (lute and theorbo) will set the scene for Christmas with their programme 'Now Winter Comes Slowly' (3 December 2017).
The virtuoso brass ensemble Septura opens the audience's ears to new sounds as they make their St John's Smith Square debut in a sequence of concerts entitled Kleptomania, playing arrangements of great works written for other instrumental combinations.
Piano recitals include a performance with Sibelius scholar Joseph Tong in a Nordic themed concert to mark the 60th anniversary (to the day) of Sibelius's death (20 September 2017) and Blüthner Pianos present a series of concerts to showcase their instruments with the pianists Tom Poster, Dmitry Masleev and Martin Sturfalt. Russian pianist Dmitri Alexeev is another pianist celebrating his 70th birthday at St John's Smith Square (2 November 2017).
Southbank Centre at St John's Smith Square
The collaboration with Southbank Centre continues for 17/18 during their period of refurbishment. Highlights include the Orchestra of the Age of Enlightenment with Sally Beamish's The Judas Passion (25 September 2017) and Rachel Podger playing and directing the OAE in a concert featuring two of Mozart's Violin Concertos (27 November 2017). The London Sinfonietta return under their founder conductor David Atherton to give a performance of Henze's landmark work Voices, based on 22 folk songs from around the world (11 October 2017) and St John's Smith Square will also host some of the London Sinfonietta's 50th birthday celebrations as they revisit many of the most iconic works from the past 50 years including music by Xenakis, Colin Matthews and Sir Harrison Birtwistle.
Highlights from Southbank Centre's International Chamber Music Series at St John's Smith Square include the Emerson Quartet in concerts on two consecutive nights with the late quartets of Beethoven (31 October and 1 November 2017) and Steven Osborne returning with friends to perform Messiaen's monumental Quartet for the End of Time alongside Shostakovich's Second Piano Trio (14 November 2017). Southbank Centre's International Piano Series at St John's Smith Square includes concerts with Bertrand Chamayou, Víkingur Ólafsson, Boris Giltburg, Alice Sara Ott and George Li.
Richard Heason, Director of St John's Smith Square said: "St John's Smith Square is unique amongst London's concert halls. It is the oldest, yet most flexible, concert hall in London and as such I am very proud that we are able to offer a programme that is so diverse but equally filled with events and festivals of deep integrity. The programme at St John's Smith Square is forged through collaborating creatively with many hugely talented and generous musicians and my grateful thanks go to all those who enable this programme to be offered. We look forward to welcoming artists and audiences to this iconic venue throughout the coming season."
Booking information:
Box Office 020 7222 1061
Book online http://www.sjss.org.uk
St John's Smith Square 2017/18 Season booking opens:
Monday 3 July 2017 for St John's Smith Square's Patrons
Friday 7 July 2017 for St John's Smith Square's Friends
Monday 10 July 2017 for General Booking
(Source: press release)
Posted in General and tagged as 2017/18 season, chamber musuc, choral music, concerts in London, piano music, St John's Smith Square.
English National Opera announces 2017/18 season
By The Cross-Eyed Pianist | April 27, 2017
ENO's 2017/18 season features four new productions and five revivals at the London Coliseum, supported by a number of projects in other venues
Daniel Kramer directs his first opera as ENO Artistic Director, a new production of La traviata starring Claudia Boyle in her role debut as Violetta
Martyn Brabbins begins his first full season as ENO Music Director, conducting performances of Marnie and The Marriage of Figaro
ENO presents the world premiere of Nico Muhly's latest opera, Marnie, directed by Michael Mayer and conducted by Martyn Brabbins
A new production of Verdi's Aida opens the 17/18 season, conducted by Keri-Lynn Wilson. After sell-out performances of his Olivier Award-winning Akhnaten, Phelim McDermott returns to direct
Cal McCrystal directs a new production of Gilbert and Sullivan's Iolanthe, starring ENO Harewood Artist Samantha Price in the title role alongside ENO favourites Andrew Shore and Yvonne Howard
Regent's Park Open Air Theatre and ENO present a new production of The Turn of the Screw, directed by multiple Olivier Award-winner and Artistic Director of the Open Air Theatre, Timothy Sheader. ENO Mackerras Fellow Toby Purser conducts
Revivals of audience favourites include Jonathan Miller's The Barber of Seville, Richard Jones's Rodelinda, Phelim McDermott's Satyagraha, Robert Carsen's A Midsummer Night's Dream and Fiona Shaw's The Marriage of Figaro
A raft of exciting British conductors new to ENO includes Leo McFall, Alexander Soddy and Hilary Griffiths. Keri-Lynn Wilson and Karen Kamensek return after acclaimed debuts in the 2014/15 and 2015/16 seasons respectively
Over 93% of cast and conductors in the 2017/18 season are British born, trained or resident. Rodelinda, Iolanthe and Satyagraha all feature casts that are entirely British born, trained or resident
More than 15 principal roles across the 17/18 season will be taken by current or former ENO Harewood Artists.
Over 39,500 tickets are available for £20 or less across the 17/18 season (500 for every performance)
ENO 2018/19
In November and December 2018 ENO will honour the 100th anniversary of the end of the First World War with a moving and contemplative interpretation of Benjamin Britten's War Requiem. Directed by Daniel Kramer and conducted by Martyn Brabbins, ENO's award-winning Chorus will be at the dramatic and musical heart of these performances of Britten's masterpiece. The exceptional team of soloists comprise soprano Emma Bell, tenor David Butt Philip and baritone Roderick Williams.
Daniel Kramer and Martyn Brabbins will work together again for the final production of the 2018/19 season. ENO and Opera North will co-produce the world premiere of composer Iain Bell's fourth opera, Jack the Ripper, with Rupert Charlesworth in the title role. A sympathetic exploration of womanhood in London's East End, the central roles will be created by some of the UK's finest singers including Josephine Barstow, Lesley Garrett, Susan Bullock, Janis Kelly and Marie McLaughlin.
www.eno.org
(Source: ENO press release)
Posted in General and tagged as 2017/18 season, English National Opera, ENO.


Being Unique in the Market – I Am Not a Number!
Or maybe I am? We at Skyline Whitespace specialise in making unique and outstanding exhibition stands, designed to engage your customers and exclusively tailored to your presentation needs. In this age, standing out and being unique is key, and we have the innovative designs and experience to make that happen. But what does it mean to be 'unique' in this age of brands, likes and trends?
Dutch designer Twan Verdock has taken this concept to the next level, as well as taking a swipe at the conventional fashion industry. Originally exhibiting in New York's Museum of modern art, Verdock shocked early critics with his satirical take on brands.
His concept was simple. He released plain black shirts, each with a corresponding number. He had number one, his girlfriend number two, and each other shirt had the subsequent number. This was a take on the so called 'uniqueness' of exclusive brands that make you pay to be unique by 'looking the same as someone else'. His reasoning was that the only exclusive thing about this habit was the serial number on the label.
Verdock claims "universal love, low consumption and unlimited creativity" was his ultimate goal, and he was ambitious to number as many people around the world as possible. He wanted to bring people together and to give them something as simple and ultimately unique as their own number. No matter about race, creed or financial positions; just a number.
It's a one of a kind, singular token of individuality. So far, he has garnered moderate success as he tries to spread his message around the globe, with over 600 people now part of the program and sharing their stories and experiences.
At Skyline, this has made us think hard about what it is to be a unique product. This brings all sorts of ideas to light, such as whether a brand is really unique? Is Verdock's own creation now not a brand in itself? This in turn makes you ponder the conundrum that is, if are we are all unique, are we just like everyone else?
Ultimately we feel it is people that make products special. After all, what is in a brand name without the people that back it up, the customers and designers alike? As such, we feel we can truly understand how important our customers are, and we can therefore bring this to your exhibitions. Especially designed with customers in mind, these designs are innovative and, more importantly, will engage visitors. Our designs invite our audiences to stay and enjoy what you have to offer.
With a wide range of portable and fixed exhibition stands available for purchase or hire, we are sure we can find something truly unique for you! As a global success, we have the experience and confidence to bring you the very best service! Any questions? Contact us for more information. Our friendly support staff will be happy to help.


Stores across the country now have a new addition to their usual lineup of conventional cleaners. Greening the Cleaning® products, which have successfully "greened" hospitals, schools and businesses nationwide, are now available for home use.
"The institutional line has proved to be so effective, that we wanted to offer the same products to homeowners," says Mrs. Imus. Two products are currently available in stores: Glass Cleaner and All-Purpose Cleaner, with Laundry Detergent and Hand Dish Soap coming soon. The glass cleaner leaves windows and mirrors streak-free, with no dangerous ammonia. The all-purpose cleaner tackles almost any task, from countertops and toys to floors and bathrooms. Both products are non-toxic and free of the carcinogens, mutagens, teratogens and endocrine disruptors often found in traditional products. "And they work as well or better than conventional cleaners" says Mrs. Imus.
All the retail products feature a light citrus-sage scent. They are safe to use around children, which makes them a favorite with parents. "We disclose all ingredients right on the bottle," explains Deirdre Imus, "so people know exactly what they are buying." This is unlike most cleaning products on the market that list only active ingredients. 100% of all after tax profits from the sale of retail products go to The Imus Cattle Ranch for Kids with Cancer in Ribera, New Mexico.
GTC® retail products are also offered online at www.imusranchfoods.com.


text:
The Ardmore Junction station is a SEPTA transit station in Havertown, Pennsylvania. It serves the Norristown High Speed Line and SEPTA Route 103 bus.

The trolley stop is elevated, with the bus stop below on the Ardmore Busway. Ardmore Junction is on Haverford Road.

History
The Philadelphia and Western Railroad began stopping at this transit location in 1907 as part of the railroad's plans to connect Philadelphia with Parkesburg. The 103 bus right-of-way was once part of the Ardmore branch of the Red Arrow trolleys, but it was paved to make way for buses when the trolley line was discontinued in 1966.

The Norristown Line bridge was rebuilt circa 1992 during system-wide renovations.

In popular culture
This Philadelphia-area band Ardmore Junction, whose 1990s theme song was "High Speed Line," was named after the Ardmore Junction station—the station traveled to by guitarist Dan Mason to connect with fellow band member Kevin Shober.

Station layout

SEPTA suburban bus connections
The following SEPTA Suburban Division bus routes serve this station:
SEPTA Route 103

Gallery

References

External links

SEPTA Norristown High Speed Line stations

redpajama_set_name: RedPajamaWikipedia


text:
Wife after Death – Cast and Crew
Tony Bew
Caroline Law
Deputy Stage Manager
Sue Lovell
Set construction
Charlie Foord
Andrew Stafford
Gloria Kendrick
Hilary Cox
Brian Couling
Telephone bookings
Margaret Couling
Jeremy Bolsover
Rehearsal Prompt
Caroline has been with The Players since the production of "The Darling Buds of May"; and has been the Deputy Stage Manager for every production until this one. Now she assumes the mantle of head honcho. I'm sure she will manage both the play and the responsibility in her usual calm and organised fashion.
Sue was brand new to The Players for the production of "Hi-De-Hi" and promotion has come upon her suddenly. I'm sure she will cope after the madcap scene changes that were part and parcel of "Hi-De-Hi".
Lighting & Rehearsal Prompt
Andrew is the current President of the Marlow Players and has directed and acted in many productions over the past three decades. Andrew has kindly stepped in, in place of our usual lighting person. He has been invaluable in rehearsals, keeping the cast to the script in this very wordy play.
Charlie, "Gadget" as he is affectionately known, joined The Players for the production of "Tons of Money". He has been the sound guru and set builder for each production since.
Harvey Barrett
Brian is a long standing member of The Players. He has been in every production in the last 14 years, with one exception, and most as the leading man. He last appeared as Bert Pratt, Barry Stuart-Hargreaves' real name, in Hi-De-Hi. Here he plays the lengthy role of Harvey Barrett, Dave Thursby's long-time script writer and closest friend.
Vi Barrett
Di Hudson
Diana has been with The Players since 1993 and last appeared as Miss Benita Mullet in April 2011 in "Tons of Money". As Vi Barrett, she has to play the foil to Harvey's wise cracking comedy script writer. Both Brian and Di have put a lot of effort into these very wordy parts, for which, I am very grateful.
Laura Thursby
Gloria has been with us since 1997 and has appeared onstage in leading roles, backstage as stage manager and in front of stage as director. She last played in 'The Hollow Crown' and last directed and acted in "Hi-De-Hi". Here she has a less arduous role of the "grieving" widow of the comic phenomenon that was Dave Thursby. She also found time to coordinate the costumes.
Kevin Prewitt
Andy started acting five years ago in Maidenhead and has had many roles and also appears regularly in panto. "'Allo, 'Allo" was his first outing with The Marlow Players and last played Spike, and Mr. Pritchard in "Hi-De-Hi". Kevin is the late Dave Thursby's agent who will do anything to get his 10%.
Jane Prewitt
Laura Goodband
Laura has been with the Players for over two decades and last appeared as Belinda Budgett in "Laughter in the Dark". Here she plays the other half of the Prewitt acting agency. Although teased by the late Dave Thursby and derided by Harvey, there is more to Jane than "Two pipe cleaners going for a walk".
Jenifer Major
Jen first appeared for The Players in 2004 as Maggie in "Hobson's Choice". She has played both leading and minor roles since. She last appeared as Peggy Ollerenshaw in "Hi-De-Hi". Nobody at the funeral seems to know anything about the mysterious Kay and is described by Jane Prewitt as "Not quite the thing".


Heavily guarded in war-torn Afghanistan, Rep. Larry Bucshon met elite fighters, traveled by Blackhawk and dined in a palace with the president.
EVANSVILLE, Ind. — Heavily guarded in war-torn Afghanistan, 8th District Rep. Larry Bucshon met elite fighters, traveled by Blackhawk helicopter and dined in a palace with the president.
The November trip with six other members of Congress had been kept secret for security reasons. Bucshon's office disclosed it late Monday afternoon, after he was back on U.S. soil.
Security considerations, in fact, loomed over every move Bucshon made in Afghanistan. The seven-member bipartisan delegation — a small group is less likely to be a target, he said — returned home on Nov. 20. It was the same day a suicide bomber in Kabul killed 55 people at a gathering of Sunni Muslim scholars and clerics in the capital.
On Tuesday, American forces suffered their worst loss in the country when three Special Forces soldiers were killed by a Taliban roadside bomb. Three more soldiers and an American contractor were wounded.
"The biggest risk over there right now is ISIS, Al-Qaeda and, to a lesser extent honestly, the Taliban," said Bucshon, a Republican who was elected this month to a fifth two-year term. "We just can't talk about it until we're back."
Bucshon said he wasn't nervous about his safety in Afghanistan. Cautious? Definitely.
"The risks, honestly, are fairly low, because the planning takes months. Our people over there (in commanding General Austin S. Miller's office) helped plan the security for us," he said. "The way I look at it, if our people that are over there defending us against terrorists can be there, then certainly I can."
Bucshon agreed several months ago to make the trip at the invitation of fellow Indiana Republican Congressman Jim Banks. He said he has been looking to go to Iraq or Afghanistan for several years, but not many opportunities come to House members who aren't on the Armed Services Committee. Banks, whose congressional district includes Fort Wayne, is a member of the committee.
"And it's dangerous, honestly, to go there," said Bucshon, who wore a helmet and protective vest while there.
Traveling by Blackhawk helicopter with armed security was the safest way for members of Congress to get around, the 8th District congressman said.
"We had Blackhawk helicopters even if we were traveling a mile or so in the city, which we did a couple of times," he said. "We didn't travel on the surface streets."
The Pentagon declared an end to regular American combat operations in Afghanistan four years ago, but the perception of a threat has persisted, and U.S. troops remain.
It's one thing to observe and study events in Afghanistan from Washington, Bucshon said, but it is quite another to see it with his own eyes and hear it from commanders and U.S. troops on the ground. He said he did meet elite fighters.
"We met a number of the U.S. military commandos and Army Rangers that are helping train the Afghan Special Forces," Bucshon said. "We had the opportunity to talk with them about what our mission is over there right now."
Most policymakers can agree on a need for U.S. troops ultimately to leave Afghanistan, Bucshon said.
"From the briefings we've had, there's been a resurgence of ISIS and Al-Qaeda within Afghanistan, and they're trying to establish, like they did in Iraq, a caliphate — a safe haven for terrorists and terrorist training," he said. "That's a lot of the focus of our people over there right now, to prevent that from happening."
Attacks against the U.S. homeland are not unthinkable if it does happen, Bucshon said.
"That's what I came away with — right now, because of the resurgence of ISIS and Al-Qaeda in Afghanistan, that's primarily been our focus — to try to make sure that they're not able to establish a foothold there," he said.
Also included in this month's congressional delegation to Afghanistan: Democratic House members Thomas Suozzi of New York, Darren Soto of Florida and Conor Lamb of Pennsylvania, and Republicans Bill Flores of Texas and Rob Wittman of Virginia.
Bucshon has been to China, Israel and Jordan as a member of Congress, so it's likely he's eaten some, well, foreign cuisine. The president of Afghanistan apparently didn't serve him and the other members of Congress anything that might have been memorable — like, say, Seekh Kabob, a Falafel Wrap Meal or Taandori Chicken.
"Honestly, I can't recall," Bucshon said when asked about the menu. "It was primarily what I'd call a western type of dinner — like chicken and vegetables and this type of thing."


text:
Question: What Is Andy Biersacks Hairstyle?
1 Are Andy Black and Andy Biersack the same person?
2 How much does Andy Biersack make?
3 Are Juliet Simms and Andy Biersack still together?
4 Why is Black Veil Brides hated?
5 What religion are the members of Black Veil Brides?
6 Is Lonny Eagleton married?
7 Is Black Veil Brides still together 2020?
8 How much do Black Veil Brides make?
9 How much money does Juliet Simms make?
10 What happened to Andy Biersack?
11 Why did Ashley Purdy leave Black Veil Brides?
Are Andy Black and Andy Biersack the same person?
Andrew Dennis Biersack (born December 26, 1990), formerly known as Andy Six, is an American singer, songwriter and pianist. In May 2014, he started a solo music project under the moniker Andy Black and released his debut album, the Shadow Side, in 2016.
How much does Andy Biersack make?
How much is Andy Biersack Worth? Andy Biersack net worth: Andy Biersack is an American singer and pianist who has a net worth of $4 million. Andy Biersack was born in Cincinnati, Ohio in December 1990. He founded the rock band Black Veil Brides and is the lead vocalist and only remaining original member.
Are Juliet Simms and Andy Biersack still together?
This resulted in her being a returning act on the Warped Tour summer circuit. After the summer of 2011 and working the circuit solo for the first time, Simms has since produced her content as a solo artist. On April 16, 2016, Simms married Black Veil Brides frontman Andy Biersack.
Why is Black Veil Brides hated?
But many people hate them for their makeup, black hair, and all that. They like a more clean appearance in their metal bands, where the band members don't wear any makeup, dress up in all black and due their hair, etc.
You might be interested: FAQ: How Much Does Hairstyle Change Your Image?
What religion are the members of Black Veil Brides?
Black Veil Brides is a Roman Catholic term used for when a woman marries into the church and gives up all the pleasures of life to devote her life to God. She is then deemed a Black Veil Bride.
Is Lonny Eagleton married?
He married his wife Rhita in 2019.
Is Black Veil Brides still together 2020?
Black Veil Brides and Ashley Purdy have mutually agreed to part ways. We have enjoyed a wonderful run together and both parties wish one another continued success moving forward.
How much do Black Veil Brides make?
Black Veil Brides's revenue is $12.6K in 2019. It is an approximate forecast and could vary in the range between $12.4K – $16.4K. Black Veil Brides Net Worth 2019.
November 2019 $6.2K -$8.1K
December 2019 $4.5K -$5.9K
How much money does Juliet Simms make?
Juliet Simms net worth is $2.5 million dollar.
Juliet Simms
Origin Clearwater, Florida, United States
Genres Rock pop soul folk rock alternative rock indie rock punk rock
Occupation(s) Singer songwriter composer musician performer entrepreneur model
Instruments Vocalist Guitar Piano
What happened to Andy Biersack?
Black Veil Brides vocalist Andy Biersack got into a heated altercation with his wife, former The Voice contestant Juliet Simms, on an airplane over the weekend. Part of the confrontation was caught on camera and acquired by TMZ. According to TMZ, Juliet got louder and louder before striking Biersack in the face.
Why did Ashley Purdy leave Black Veil Brides?
Purdy's exit came shortly after spending time in a psychiatric hospital to go through grief counseling and therapy. "What sucks was the timing of it all," says Purdy. "They didn't have anything to do with each other. There are legal aspects of what I can say about the departure."
Quick Answer: How To Find Products For A Hairstyle?
Often asked: Double Chin What Hairstyle Looks Good On A Round Face?


text:
La Yekokora, ou Yokokala, est une rivière du Congo-Kinshasa, un sous-affluent du fleuve Congo par la Lulonga-Lopori dont elle est un affluent.
Elle sert de limite nord à la réserve de faune de Lomako-Yokokala.

Géographie

Cours d'eau en république démocratique du Congo
2Yekokora


text:
Tomás Povedano de Arcos (Lucena, Spain, September 22, 1847 — San José, Costa Rica, February 29, 1943) was a Spanish painter, who spent much of his life in Costa Rica.

Biography
He studied painting in Málaga and Seville, a city where he worked as an illustrator while he was a student at the Academy of Fine Arts and taught private drawing lessons. His artistic career began by decorating fans, which will be revealed later in a series of flower paintings and allegorical themes.

He collaborated with the movement that tried to establish the First Spanish Republic by writing in some media such as El Abanderado and El Baluarte; He was a volunteer militian and representative delegate of the Provincial Committee before the Municipal Committee of Republican Coalition. He was a Mason (he was even Venerable Master of the Respectful Lodge Hermes N. 7) and a theosophist.

In 1889-1891 he participated in the scientific, literary and artistic competitions of Seville and in 1889 he won a gold medal at the Universal Exhibition in Paris for a full-length portrait. That triumph contributes to winning the contest opened by the Legation of Ecuador to create a high school of plastic arts in Cuenca.

He arrived in that South American country in 1892 and founded the Academy of Fine Arts of Cuenca and also that of Guayaquil. During the time he remained in Ecuador he had important commissions for portraits.

He left Ecuador in 1896 to move to Mexico, but on the way he stopped in Costa Rica at the invitation of the Government. President Rafael Yglesias Castro hires him to organize the National School of Fine Arts, which is inaugurated on March 12 of the following year in San José.

Povedano served as director of said School until 1940, when the institution becomes part of the University of Costa Rica.

Impressed by the aborigines, Povedano painted pictures that reflect, idealized, the culture, history, art and physiognomy of the native population of America. He also made an important national-themed work that includes landscapes and customs.

In 1926 he was selected - along with Enrique Echandi, Ezequiel Jiménez and Emil Span - to represent Costa Rica in the 1925 Pan American Painting Exhibition, sponsored by the Los Angeles Museum of Art and held on its premises. He participated in the Exhibitions of Plastic Arts sponsored by the Diario de Costa Rica and was honorary president - along with Span, a German painter who also taught at the Povedano School - of the Art Center. He contributed to the decoration of the National Theater with three great oils: Art, Commerce and Industry.

He painted portraits of several presidents and members of important families in the country. Among the first, is José María Castro, who Luis Guillermo Solís, after assuming the presidency in 2014, placed in his office. He introduced watercolor in Costa Rica and showed interest in the flora of the country, painting, like Span, pictures of orchids and other native plants.

Povedano also made illustrations for texts such as the Silabario castellano by Porfirio Brenes, the newspaper La Tribuna, the Páginas ilustradas and El Fígaro, as well as for the Historical Booklet of Costa Rica, which, written by Ricardo Fernández Guardia, is the history manual more used in Costa Rican education during the 20th century.

A teacher of a large number of young Costa Ricans eager to devote themselves to the plastic arts, Povedano was a clear representative of the academic style, which prevailed in the early years of development of Costa Rican painting. A great defender of the existence of the institution he created, he manages to keep the doors of the School open even in the most pressing economic situations of the country. He stood out in the portrait - he represented some of the most important politicians and characters of Costa Rican society - and in landscapes, customary and decorative paintings.

His work was recognized with awards and distinctions, and after his death several important retrospectives have been organized.

He was the organizer of the Costa Rican theosophical movement and founder of the Virya Lodge (between 1905 and 1915 he directed the magazine of the same name), from which he derived the Dharana, which Roberto Brenes presided.

Povedano married first the Spanish Carolina Amores - with whom she had two children, María de la Cinta and Diego - and then with the Costa Rican María Esmeralda Inés de Jesús Loria Rivera (n. 12.10.1901); from the second marriage he had a daughter, María Elena (n. 25.06.1928).

Fine arts school director

Povedano implemented academicism in the School he founded and was a consistent opponent of the new pictorial trends of the late nineteenth century and the avant-garde of the early twentieth century. Thus, he wrote that the works of synthesism, cubism, futurism and orphism were "studies of contemporary artistic pathology, [...] engenders of dementia, that it is not conceived how they could have been accepted for a moment without severe rejection in peoples who presume to go to the head of civilization ».

As an essay dedicated to the plastic arts exhibitions held in San José from 1928 to 1937 points out, the School of Fine Arts was an "academy entirely with its back to the renovating tendencies of the time. His works are aimed primarily at certain areas of social elite refinement".

Povedano students followed the copy of plasters and drawings that were part of the collection of classical sculptures and prints that the Government had acquired for teaching. It was a question of copying «the models imported from Europe with landscapes of an outdated arcadia». As for natural models, in addition to the portrait, still lifes prevailed: flowers, vegetables and fruits; Another frequent theme was the landscapes of lakes with roundabouts or swans, many of which "were archaic." "Hence, in some cartoons, many of Povedano's students were called" paints pillows and ribbons." And the absence of the Costa Rican was notorious, "says the essay.

However, there is unanimity in recognizing their teaching skills. Povedano knew how to teach and possessed a very solid knowledge of pictorial techniques, which together with the fierce discipline he imposed gave good results.

Numismatics
Several works by Povedano served as the basis for images that were later recorded on banknotes that circulated in Costa Rica. The first in which a portrait made by the Spanish artist was used is that of 10 colones from 1903, issued by the Anglo Costa Rican Bank. This is a charcoal drawing by Braulio Carrillo Colina, which had been published the previous year in the Magazine of Costa Rica. This portrait is the most reproduced in Costa Rican paper money: thus, it was re-engraved on the 5 colón banknotes of the National Bank of Costa Rica in the 1940s, and in others of the Central Bank in the 1950s and 1960s.

The portrait of José Rafael Gallegos, who ruled the country twice, was chosen to adorn the 1-colon bill of the Costa Rican Anglo in 1917, but it never went into circulation.

The influence of Povedano's drawings is clearly present in the image that illustrates the reverse of the 10-bank National Banknote of the F series of 1939: the engraving of the aboriginal chief is very similar to the cacique huetar that the painter made for the historical Primer of Costa Rica.

In 1938, Povedano made a pencil drawing of Juan de Cavallón (currently in the Visual Arts Collection of the Central Bank), which three years later would be reproduced by the engraver of the printing house Waterlow and Sons, London, on the ticket 20 colones of the National Bank, series E, in 1941.

In the same year and in the same bank, the 2-colon banknote, series E, was circulated, which had on its back the modified image of The Rescue of Dulcehé, an unfinished oil painting by Povedano. The engraver of the printing house made the pertinent changes to present a finished work: he drew the characters of the figures insinuated in the original work, modified some positions of others and added background elements, as explained by Manuel Chacón, curator of numismatics in the Museums of the Central Bank.

Gallery

References

1847 births
1943 deaths
Costa Rican painters
Costa Rican Theosophists
Costa Rican Freemasons
People from Lucena, Córdoba
Spanish expatriates in Ecuador
Spanish emigrants to Costa Rica


I think Amethyst's reaction at the end of the most recent episode of Steven Universe sums up my feelings about the events of said episode perfectly.
Before I go into too much more detail about all the stuff going on in my brain about the most recent Steven Universe episodes, Can't Go Back and A Single Pale Rose, I should warn everyone that there will be spoilers. Lots of them. So, if you haven't already watched the most recent two episodes of Steven Universe: stop reading this, go find those episodes, and watch them. And then when you've recovered, come back and read with me. Beyond the jump is spoilers, so you've been warned!


text:
+44 (28) 9099 2599info@gartantech.com
Re-engaging Your Staff Through Innovation
Gallup surveyed over 35 million employees to understand their attitudes to their work. Only 10% of the participants described themselves as being 'passionate' about their work; 56% said they were disengaged and 73% of the actively disengaged employees were looking for new job opportunities.
There are many reasons, of course, why an employee would be disengaged. But the inescapable fact is that if you have a disengaged employee then you are dealing with a potential flight-risk. Unemployment levels have been falling for years and we're moving steadily closer to full employment. So organisations need to do all they can to re-engage with that most valuable of assets: their staff. If they don't, they'll lose them.
Employees who utilise their abilities, strengths and skills every day are 15% less likely to leave their job, 8% more productive, and six times more likely to be engaged at their workplace – Gallup
So what can employers do and how can Gartan help?
At Gartan, we believe in thinking differently. We believe in making peoples' lives easier by making it easier for them to manage their time. We help organisations like yours to put a genuine value on your peoples' time. And we do that through innovation, experience and respect. At the core, though, is innovation.
But what is innovation?
It's not about creating something new but rather, it's about taking something that already exists and finding ways to make it better. Innovation is all around us. One of my favourite innovators were The Beatles. By the 1960s people had been recording music for decades but The Beatles took it to a whole new level.
Take their classic song, 'Strawberry Fields Forever', for example. The song was written by John Lennon on an acoustic guitar and when they went into the studio to record it in 1966 the first versions were very laid back. As the weeks went on, though, the song changed, and they couldn't decide what they wanted to do with it. After five weeks, John Lennon came into the studio and said that he wanted to take an early version and merge it with a later version. But there was a problem. Not only were the versions in different keys, they were also played at different speeds. And remember, this was in the days before computers.
But one of the studio engineers innovated. He suggested that they use two tape machines. Slow one of them down, speed the other up and that would allow them to match the speeds and the different keys. There was another problem, though. The tape machines in 1966 didn't have speed dials so how could they adjust the speeds? More innovation was needed. They solved the problem by reducing the power to one machine, slowing it down, and increasing the power to the other one, to speed it up. So, one of the great songs of the '60s came into being through innovation.
So how can innovation and, consequently, Gartan, help your organisation?
People live more and more of their lives using their smart devices. They watch their favourite movies and listen to their favourite music from anywhere. They order taxis, food, flights and hotels and manage their banking, all through a smartphone. So why can't they manage their professional development from anywhere too? Your staff want to feel properly valued and be given the opportunity to do their very best for you. But you need to give them the best tools to help achieve both.
Gartan Expert is an integrated, cloud and mobile solution designed to bring the end user into the heart of the competency management process. The training department and other managers have instant access to the most up-to-date staff competency information. The system alerts the user when staff competencies are due to expire. When the user creates a training event, the system suggests which staff, based on the status of their competencies, should attend. Expert can also integrate with our rostering tools to indicate if the potential delegates are available on the day of the proposed training event. The associated training leave bookings are automatically created, and the solution manages event announcement, attendance confirmation and event reminder alerts.
Using the system's Course Calendar, staff can view upcoming training events and submit requests to attend. They can do all this using their mobile devices and they can also maintain their skills immediately after an emergency incident ends.
Gartan Expert was designed to cater for all users' needs. The process of identifying competencies that are due to expire, creating a training event and the associated training leave bookings, checking the associated minimum staffing levels and updating competency statuses is now fully automated. We also send the associated time and attendance data through to our Payroll solutions.
Managers now have instant access – in one place – to all aspects of a staff member's training. They can choose an employee's competency and the system will show the full history of that competency. For example, the training events the employee attended, the events they declined to attend and the incidents at which they used the competency.
From enterprise level integration, to simple end user interaction, Gartan Expert is revolutionising the competency management process. As always, we're helping to make the lives of our clients and their staff easier, better and safer.
Oh, and if you want to hear when the two versions of Strawberry Fields Forever merge, go to the 61st second of the song. Happy listening!!!
Malachi Eastwood is Chief Executive Officer for Gartan Technologies a software company that specialises in rostering, attendance/payroll and staff-learning management solutions.
2020 – Gartan getting things done
A Year in the Life 2020 November 2020: The new Gartan/Systel integration in West Yorkshire…
Solving Cambrdgeshire Fire & Rescue Service's inefficient rostering problem
The Problem Cambridgeshire Fire & Rescue Service employs over 300 full-time staff across multiple locations…
"Turning Back Time For The Last Time?"
"An Economical Project for Diminishing the Cost of Light" Falling back to winter The first…
Getting to the Core of Staff Competencies
Our client, Dorset Wiltshire Fire & Rescue Service, like the rest of the Emergency Services…
The Unrivaled Benefit of Teamwork
Danial Day-Lewis plays Lincoln in Speilberg's 2011 biopic "Team of Rivals" is the acclaimed biography…
P: +353 (74) 91 266 08
E: info@gartantech.com
We use cookies to analyse our traffic to ensure that we give you the best experience on our website. If you continue to use this site we will assume you agree to our use of cookies.Ok


text:
Q: Django multi db test fails post teardown My multi-db test problem is the following:
# (django 2.0.7, python 3.6)
# settings.py:

DATABASES = {
    'default':{},
    'one': { # connection1 settings here }
    'two': { # connection2 settings here }
}
DATABASE_ROUTERS = []

# test.py
class MyTestCase(TestCase):

    def test_my_function(self):
         pass # this IS literally the code

I run python manage.py test -v 2 and see that the test runner builds up the two mock databases and runs the test that is green
test_my_function (mymodule.test.MyTestCase) ... ok

Then ERROR then ERROR: test_get_pronunciation (languages.test_hr.HRTestCase)
with the following explanation:
File "/Users/Barnabas/PycharmProjects/rhymedict-multisite/venv/lib/python3.6/site-packages/django/db/backends/dummy/base.py", line 20, in complain
    raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

This should mean that the program tries to access the 'default' database.
(The same thing happens if I add multi_db = True to my MyTestCase)
Yet strangely if I write
class MyTestCase(TestCase):
    pass

The db's are built up, torn down just fine.
What do I do wrong?
Update:
self._post_teardown() raises the error and I can see that both dummy db's are torn down before, successfully.

A: Solution: I need to use SimpleTestCase instead of TestCase, and voila, problem solved.
The problem happened in _post_teardown() that should be an empty function (as it is empty in TestCase), but for some reason TransactionTestCase's _post_teardown() gets executed instead.

A: That is how I did to make tests work with two databases, worked like a charm:
import sys

if 'test' in sys.argv or 'test_coverage' in sys.argv:
    DATABASES = {
        'default':{
            'ENGINE':'django.db.backends.sqlite3' # <---- you can add other db connections..
        }
    }
else:
    DATABASES = {
        'default': {},
            'one': { # connection1 settings here }
            'two': { # connection2 settings here }
    }

    # DB routers specification path - case sensitive:
    # ** needs to be within the same scope of DATABASES.
    DATABASE_ROUTERS = ['myapp.routers.db_router.MyRouter']

On tests file:
class TestModel(TestCase):

    databases = '__all__'

    . . .

redpajama_set_name: RedPajamaStackExchange


A three-year-old boy caught his arm in a meat grinder at a kebab shop in the northern Italian town of Lutago, Bolzano.
The Indian child was in the back room of his parents' kebab shop when the accident happened, Il Gazzetino reported.
His father immediately called the White Cross, a rescue association which operates in the German-speaking region of Italy.
Fire services and a physician also rushed to the shop, but were unable to safely remove the child's arm from the grinder.
He was later flown to a hospital in Innsbruck, Germany, where surgeons at a specialist centre for limbs, treated the child.


Welcome to the 2018 edition of the Village 2 Village 10k and 7.5k presented by Schaeffer Eye Center!
Join your fellow runners for this fun-filled run through the beautiful neighborhoods and Villages of Mountain Brook. Last year's event set a new registration record with nearly 800 registrations, and for 2018 we want to break it! We expect more than 1000 runners to toe the line in 2018, and we want you to join in on the fun!
After the race stick around the finish line for the biggest after-party in town in the new Lane Parke development in Mountain Brook Village.
7.5k Option: If you do not think you are ready for a 10k, there is a race option for you! For the second time, the V2V10k will also offer a shorter race distance. Instead of running 6.2 miles (10k), you now also have the option of running 4.6 miles (7.5k). Now everyone can join in on the fun even if you are not ready to tackle the full 10k!
Along the course runners will find a few surprises to keep them smiling like music provided by the iHeartRadio music vans, while local neighborhood families will compete to see which home can provide the loudest and largest cheer station!
At the finish line you will receive a finisher's medal, chocolate-dipped strawberries, and mimosas. Then enjoy the festivities which include live bands, carnival games and kids area, face painting, refreshments from local restaurants, and much, much more! You do not want to miss this race! Runners of all paces are welcome and encouraged to participate in the festivities.
The Village 2 Village 10k also has a charitable component, the Village 2 Village 4 Vision. Thanks to the generosity of our title sponsor, Schaeffer Eye Center will provide eye exam services and eyeglasses to economically disadvantaged communities on behalf of registrants. How amazing is that?! Not only do you get to run a great race, but you will be helping local children achieve better eyesight.
SHIRT NOTICE: To be guaranteed a finisher shirt, you must pre-register online. Runners who sign up at packet pick-up or on race day are not guaranteed a shirt. Any left over shirts available at packet pick-up will be offered on a first come first served basis.
CANCELLATION STATEMENT: This event will occur rain or shine. Village 2 Village 10k reserves the right to cancel in extreme circumstances. In the event of cancellation, there will be no refunds.


Assignment Planner is an application which allows you to keep track of homework assignments for a number of different courses. It includes features that allow you to display only those assignments that are yet to be completed, add information to all your assignments, courses and textbooks for reference, filter assignments by their type, color code assignments by a number of different criteria, and much more. You can also export your assignments to a text file or to iCal, to easily view your assignments from your iPod. Assignment Planner is a simple and easy-to-use application thats great for college or high school students.
"applicability beyond just assignement planning"
i am using the program for project task tracking. since the application allows you to change the names of the fields, i changed "assignment" to "task" and "course" to "project," etc. this changes the application from an assignment planner to a task planner, and its features translate nicely. i recomment the product to anyone who has this kind of requirement (and who doesn't?). awesome.
"Has potential, but not there yet"
Let's just say that even the readme says, "Put something here someday." This is software that's simply not yet ready for public consumption.
It's missing some basic functionality (like editing assignment dates or names, the ability to distinguish visually completed from incomplete assignments) and would do well to add some slightly-more-advanced functionality (filter by class).
As it stands, not even useable by high schoolers, let alone university-level students. Shows promise, and seems to be headed in the right direction. Still a ways to go, though.


Trying to replicate my configuration from Home Assistant and setup association between TKB Dual Paddle Wall Switch TZ36D and Fibaro Double Switch 2.
Group 2 on TKB switch associated with Fibaro Double Switch 2 (FGS-223), but for some unknown reason setup doesn't work on Vera. Although it works on Home Assistant without any issues.
Does anybody had such experience and have any tips how to solve this non optimal situation?
Now I understand why devices can't communicate with each other.
TKB is added in non-secure manner and Fibaro is in secure.
And it is not possible force to non-secure addition for Z-Wave plus devices in Vera controller.


text:
Q: Renaming files in a particular folder in a drive using Power shell Usually to rename files in a drive, I use the following command line:

#

$old = 'Old Text'
$new = 'New Text'

#

$oldwildcard = "*$old*"

$items  = Get-ChildItem  -Recurse
[array]::Reverse($items)

foreach($item in $items)
{
    if($item.name -clike $oldwildcard)
    {
        Write-Host $item.FullName -ForegroundColor green
        $newName = $item.name -creplace $old, $new
        Rename-Item -Path $item.PSPath -NewName $newName
    }
}

#

Now I only need to rename files in the folder e.g. O:\Reviews. Can you please help?
Thanks in advance

A: The Get-ChildItem cmdlet in PowerShell has the -path parameter, where in it takes the path (as a string) for the location for which you want to list the items and child items.
So in your case, all you need to do it is change $items = Get-ChildItem -Recurse to $items = Get-ChildItem -path "O:\Reviews".
So your overall code looks like -
$oldwildcard = "*$old*"

$items  = Get-ChildItem -path "O:\Reviews"
[array]::Reverse($items)

foreach($item in $items)
{
    if($item.name -clike $oldwildcard)
    {
        Write-Host $item.FullName -ForegroundColor green
        $newName = $item.name -creplace $old, $new
        Rename-Item -Path $item.PSPath -NewName $newName
    }
}