text:
from copy import deepcopy
from datetime import datetime, timedelta
from hashlib import md5
from Queue import Empty, Queue
import re
import time
import traceback

# 3p
from pyVim import connect
from pyVmomi import vim

# project
from checks import AgentCheck
from checks.libs.thread_pool import Pool
from checks.libs.vmware.basic_metrics import BASIC_METRICS
from util import Timer

SOURCE_TYPE = 'vsphere'
REAL_TIME_INTERVAL = 20  # Default vCenter sampling interval

# The size of the ThreadPool used to process the request queue
DEFAULT_SIZE_POOL = 4
# The interval in seconds between two refresh of the entities list
REFRESH_MORLIST_INTERVAL = 3 * 60
# The interval in seconds between two refresh of metrics metadata (id<->name)
REFRESH_METRICS_METADATA_INTERVAL = 10 * 60
# The amount of jobs batched at the same time in the queue to query available metrics
BATCH_MORLIST_SIZE = 50

# Time after which we reap the jobs that clog the queue
# TODO: use it
JOB_TIMEOUT = 10

EXCLUDE_FILTERS = {
    'AlarmStatusChangedEvent': [r'Gray'],
    'TaskEvent': [
        r'Initialize powering On',
        r'Power Off virtual machine',
        r'Power On virtual machine',
        r'Reconfigure virtual machine',
        r'Relocate virtual machine',
        r'Suspend virtual machine',
        r'Migrate virtual machine',
    ],
    'VmBeingHotMigratedEvent': [],
    'VmMessageEvent': [],
    'VmMigratedEvent': [],
    'VmPoweredOnEvent': [],
    'VmPoweredOffEvent': [],
    'VmReconfiguredEvent': [],
    'VmResumedEvent': [],
    'VmSuspendedEvent': [],
}

MORLIST = 'morlist'
METRICS_METADATA = 'metrics_metadata'
LAST = 'last'
INTERVAL = 'interval'

class VSphereEvent(object):
    UNKNOWN = 'unknown'

    def __init__(self, raw_event, event_config=None):
        self.raw_event = raw_event
        if self.raw_event and self.raw_event.__class__.__name__.startswith('vim.event'):
            self.event_type = self.raw_event.__class__.__name__[10:]
        else:
            self.event_type = VSphereEvent.UNKNOWN

        self.timestamp = int((self.raw_event.createdTime.replace(tzinfo=None) - datetime(1970, 1, 1)).total_seconds())
        self.payload = {
            "timestamp": self.timestamp,
            "event_type": SOURCE_TYPE,
            "source_type_name": SOURCE_TYPE,
        }
        if event_config is None:
            self.event_config = {}
        else:
            self.event_config = event_config

    def _is_filtered(self):
        # Filter the unwanted types
        if self.event_type not in EXCLUDE_FILTERS:
            return True

        filters = EXCLUDE_FILTERS[self.event_type]
        for f in filters:
            if re.search(f, self.raw_event.fullFormattedMessage):
                return True

        return False

    def get_datadog_payload(self):
        if self._is_filtered():
            return None

        transform_method = getattr(self, 'transform_%s' % self.event_type.lower(), None)
        if callable(transform_method):
            return transform_method()

        # Default event transformation
        self.payload["msg_title"] = u"{0}".format(self.event_type)
        self.payload["msg_text"] = u"@@@\n{0}\n@@@".format(self.raw_event.fullFormattedMessage)

        return self.payload

    def transform_vmbeinghotmigratedevent(self):
        self.payload["msg_title"] = u"VM {0} is being migrated".format(self.raw_event.vm.name)
        self.payload["msg_text"] = u"{user} has launched a hot migration of this virtual machine:\n".format(user=self.raw_event.userName)
        changes = []
        pre_host = self.raw_event.host.name
        new_host = self.raw_event.destHost.name
        pre_dc = self.raw_event.datacenter.name
        new_dc = self.raw_event.destDatacenter.name
        pre_ds = self.raw_event.ds.name
        new_ds = self.raw_event.destDatastore.name
        if pre_host == new_host:
            changes.append(u"- No host migration: still {0}".format(new_host))
        else:
            # Insert in front if it's a change
            changes = [u"- Host MIGRATION: from {0} to {1}".format(pre_host, new_host)] + changes
        if pre_dc == new_dc:
            changes.append(u"- No datacenter migration: still {0}".format(new_dc))
        else:
            # Insert in front if it's a change
            changes = [u"- Datacenter MIGRATION: from {0} to {1}".format(pre_dc, new_dc)] + changes
        if pre_ds == new_ds:
            changes.append(u"- No datastore migration: still {0}".format(new_ds))
        else:
            # Insert in front if it's a change
            changes = [u"- Datastore MIGRATION: from {0} to {1}".format(pre_ds, new_ds)] + changes

        self.payload["msg_text"] += "\n".join(changes)

        self.payload['host'] = self.raw_event.vm.name
        self.payload['tags'] = [
            'vsphere_host:%s' % pre_host,
            'vsphere_host:%s' % new_host,
            'vsphere_datacenter:%s' % pre_dc,
            'vsphere_datacenter:%s' % new_dc,
        ]
        return self.payload

    def transform_alarmstatuschangedevent(self):
        if self.event_config.get('collect_vcenter_alarms') is None:
            return None

        def get_transition(before, after):
            vals = {
                'gray': -1,
                'green': 0,
                'yellow': 1,
                'red': 2
            }
            before = before.lower()
            after = after.lower()
            if before not in vals or after not in vals:
                return None
            if vals[before] < vals[after]:
                return 'Triggered'
            else:
                return 'Recovered'

        TO_ALERT_TYPE = {
            'green': 'success',
            'yellow': 'warning',
            'red': 'error'
        }

        def get_agg_key(alarm_event):
            return 'h:{0}|dc:{1}|a:{2}'.format(
                md5(alarm_event.entity.name).hexdigest()[:10],
                md5(alarm_event.datacenter.name).hexdigest()[:10],
                md5(alarm_event.alarm.name).hexdigest()[:10]
            )

        # Get the entity type/name
        if self.raw_event.entity.entity.__class__ == vim.VirtualMachine:
            host_type = 'VM'
        elif self.raw_event.entity.entity.__class__ == vim.HostSystem:
            host_type = 'host'
        else:
            return None
        host_name = self.raw_event.entity.name

        # Need a getattr because from is a reserved keyword...
        trans_before = getattr(self.raw_event, 'from')
        trans_after = self.raw_event.to
        transition = get_transition(trans_before, trans_after)
        # Bad transition, we shouldn't have got this transition
        if transition is None:
            return None

        self.payload['msg_title'] = u"[{transition}] {monitor} on {host_type} {host_name} is now {status}".format(
            transition=transition,
            monitor=self.raw_event.alarm.name,
            host_type=host_type,
            host_name=host_name,
            status=trans_after
        )
        self.payload['alert_type'] = TO_ALERT_TYPE[trans_after]
        self.payload['event_object'] = get_agg_key(self.raw_event)
        self.payload['msg_text'] = u"""vCenter monitor status changed on this alarm, it was {before} and it's now {after}.""".format(
            before=trans_before,
            after=trans_after
        )
        self.payload['host'] = host_name
        return self.payload

    def transform_vmmessageevent(self):
        self.payload["msg_title"] = u"VM {0} is reporting".format(self.raw_event.vm.name)
        self.payload["msg_text"] = u"@@@\n{0}\n@@@".format(self.raw_event.fullFormattedMessage)
        self.payload['host'] = self.raw_event.vm.name
        return self.payload

    def transform_vmmigratedevent(self):
        self.payload["msg_title"] = u"VM {0} has been migrated".format(self.raw_event.vm.name)
        self.payload["msg_text"] = u"@@@\n{0}\n@@@".format(self.raw_event.fullFormattedMessage)
        self.payload['host'] = self.raw_event.vm.name
        return self.payload

    def transform_vmpoweredoffevent(self):
        self.payload["msg_title"] = u"VM {0} has been powered OFF".format(self.raw_event.vm.name)
        self.payload["msg_text"] = u"""{user} has powered off this virtual machine. It was running on:
- datacenter: {dc}
- host: {host}
""".format(
            user=self.raw_event.userName,
            dc=self.raw_event.datacenter.name,
            host=self.raw_event.host.name
        )
        self.payload['host'] = self.raw_event.vm.name
        return self.payload

    def transform_vmpoweredonevent(self):
        self.payload["msg_title"] = u"VM {0} has been powered ON".format(self.raw_event.vm.name)
        self.payload["msg_text"] = u"""{user} has powered on this virtual machine. It is running on:
- datacenter: {dc}
- host: {host}
""".format(
            user=self.raw_event.userName,
            dc=self.raw_event.datacenter.name,
            host=self.raw_event.host.name
        )
        self.payload['host'] = self.raw_event.vm.name
        return self.payload

    def transform_vmresumingevent(self):
        self.payload["msg_title"] = u"VM {0} is RESUMING".format(self.raw_event.vm.name)
        self.payload["msg_text"] = u"""{user} has resumed {vm}. It will soon be powered on.""".format(
            user=self.raw_event.userName,
            vm=self.raw_event.vm.name
        )
        self.payload['host'] = self.raw_event.vm.name
        return self.payload

    def transform_vmsuspendedevent(self):
        self.payload["msg_title"] = u"VM {0} has been SUSPENDED".format(self.raw_event.vm.name)
        self.payload["msg_text"] = u"""{user} has suspended this virtual machine. It was running on:
- datacenter: {dc}
- host: {host}
""".format(
            user=self.raw_event.userName,
            dc=self.raw_event.datacenter.name,
            host=self.raw_event.host.name
        )
        self.payload['host'] = self.raw_event.vm.name
        return self.payload

    def transform_vmreconfiguredevent(self):
        self.payload["msg_title"] = u"VM {0} configuration has been changed".format(self.raw_event.vm.name)
        self.payload["msg_text"] = u"{user} saved the new configuration:\n@@@\n".format(user=self.raw_event.userName)
        # Add lines for configuration change don't show unset, that's hacky...
        config_change_lines = [line for line in self.raw_event.configSpec.__repr__().splitlines() if 'unset' not in line]
        self.payload["msg_text"] += u"\n".join(config_change_lines)
        self.payload["msg_text"] += u"\n@@@"
        self.payload['host'] = self.raw_event.vm.name
        return self.payload

def atomic_method(method):
    """ Decorator to catch the exceptions that happen in detached thread atomic tasks
    and display them in the logs.
    """
    def wrapper(*args, **kwargs):
        try:
            method(*args, **kwargs)
        except Exception as e:
            args[0].exceptionq.put("A worker thread crashed:\n" + traceback.format_exc())
    return wrapper

class VSphereCheck(AgentCheck):
    """ Get performance metrics from a vCenter server and upload them to Datadog
    References:
        http://pubs.vmware.com/vsphere-51/index.jsp#com.vmware.wssdk.apiref.doc/vim.PerformanceManager.html

    *_atomic jobs perform one single task asynchronously in the ThreadPool, we
    don't know exactly when they will finish, but we reap them if they're stuck.
    The other calls are performed synchronously.
    """

    SERVICE_CHECK_NAME = 'vcenter.can_connect'

    def __init__(self, name, init_config, agentConfig, instances):
        AgentCheck.__init__(self, name, init_config, agentConfig, instances)
        self.time_started = time.time()
        self.pool_started = False
        self.exceptionq = Queue()

        # Connections open to vCenter instances
        self.server_instances = {}

        # Event configuration
        self.event_config = {}
        # Caching resources, timeouts
        self.cache_times = {}
        for instance in self.instances:
            i_key = self._instance_key(instance)
            self.cache_times[i_key] = {
                MORLIST: {
                    LAST: 0,
                    INTERVAL: init_config.get('refresh_morlist_interval',
                                    REFRESH_MORLIST_INTERVAL)
                },
                METRICS_METADATA: {
                    LAST: 0,
                    INTERVAL: init_config.get('refresh_metrics_metadata_interval',
                                    REFRESH_METRICS_METADATA_INTERVAL)
                }
            }

            self.event_config[i_key] = instance.get('event_config')

        # First layer of cache (get entities from the tree)
        self.morlist_raw = {}
        # Second layer, processed from the first one
        self.morlist = {}
        # Metrics metadata, basically perfCounterId -> {name, group, description}
        self.metrics_metadata = {}

        self.latest_event_query = {}

    def stop(self):
        self.stop_pool()

    def start_pool(self):
        self.log.info("Starting Thread Pool")
        self.pool_size = int(self.init_config.get('threads_count', DEFAULT_SIZE_POOL))

        self.pool = Pool(self.pool_size)
        self.pool_started = True
        self.jobs_status = {}

    def stop_pool(self):
        self.log.info("Stopping Thread Pool")
        if self.pool_started:
            self.pool.terminate()
            self.pool.join()
            self.jobs_status.clear()
            assert self.pool.get_nworkers() == 0
            self.pool_started = False

    def restart_pool(self):
        self.stop_pool()
        self.start_pool()

    def _clean(self):
        now = time.time()
        # TODO: use that
        for name in self.jobs_status.keys():
            start_time = self.jobs_status[name]
            if now - start_time > JOB_TIMEOUT:
                self.log.critical("Restarting Pool. One check is stuck.")
                self.restart_pool()
                break

    def _query_event(self, instance):
        i_key = self._instance_key(instance)
        last_time = self.latest_event_query.get(i_key)

        server_instance = self._get_server_instance(instance)
        event_manager = server_instance.content.eventManager

        # Be sure we don't duplicate any event, never query the "past"
        if not last_time:
            last_time = self.latest_event_query[i_key] = \
                event_manager.latestEvent.createdTime + timedelta(seconds=1)

        query_filter = vim.event.EventFilterSpec()
        time_filter = vim.event.EventFilterSpec.ByTime(beginTime=self.latest_event_query[i_key])
        query_filter.time = time_filter

        try:
            new_events = event_manager.QueryEvents(query_filter)
            self.log.debug("Got {0} events from vCenter event manager".format(len(new_events)))
            for event in new_events:
                normalized_event = VSphereEvent(event, self.event_config[i_key])
                # Can return None if the event if filtered out
                event_payload = normalized_event.get_datadog_payload()
                if event_payload is not None:
                    self.event(event_payload)
                last_time = event.createdTime + timedelta(seconds=1)
        except Exception as e:
            # Don't get stuck on a failure to fetch an event
            # Ignore them for next pass
            self.log.warning("Unable to fetch Events %s", e)
            last_time = event_manager.latestEvent.createdTime + timedelta(seconds=1)

        self.latest_event_query[i_key] = last_time

    def _instance_key(self, instance):
        i_key = instance.get('name')
        if i_key is None:
            raise Exception("Must define a unique 'name' per vCenter instance")
        return i_key

    def _should_cache(self, instance, entity):
        i_key = self._instance_key(instance)
        now = time.time()
        return now - self.cache_times[i_key][entity][LAST] > self.cache_times[i_key][entity][INTERVAL]

    def _get_server_instance(self, instance):
        i_key = self._instance_key(instance)

        service_check_tags = [
            'vcenter_server:{0}'.format(instance.get('name')),
            'vcenter_host:{0}'.format(instance.get('host')),
        ]

        if i_key not in self.server_instances:
            try:
                server_instance = connect.SmartConnect(
                    host=instance.get('host'),
                    user=instance.get('username'),
                    pwd=instance.get('password')
                )
            except Exception as e:
                err_msg = "Connection to %s failed: %s" % (instance.get('host'), e)
                self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL,
                        tags=service_check_tags, message=err_msg)
                raise Exception(err_msg)

            self.server_instances[i_key] = server_instance

        # Test if the connection is working
        try:
            self.server_instances[i_key].RetrieveContent()
            self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK,
                    tags=service_check_tags)
        except Exception as e:
            err_msg = "Connection to %s died unexpectedly: %s" % (instance.get('host'), e)
            self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL,
                    tags=service_check_tags, message=err_msg)
            raise Exception(err_msg)

        return self.server_instances[i_key]

    def _compute_needed_metrics(self, instance, available_metrics):
        """ Compare the available metrics for one MOR we have computed and intersect them
        with the set of metrics we want to report
        """
        if instance.get('all_metrics', False):
            return available_metrics

        i_key = self._instance_key(instance)
        wanted_metrics = []
        # Get only the basic metrics
        for metric in available_metrics:
            # No cache yet, skip it for now
            if (i_key not in self.metrics_metadata
                    or metric.counterId not in self.metrics_metadata[i_key]):
                continue
            if self.metrics_metadata[i_key][metric.counterId]['name'] in BASIC_METRICS:
                wanted_metrics.append(metric)

        return wanted_metrics

    def get_external_host_tags(self):
        """ Returns a list of tags for every host that is detected by the vSphere
        integration.
        List of pairs (hostname, list_of_tags)
        """
        self.log.info("Sending external_host_tags now")
        external_host_tags = []
        for instance in self.instances:
            i_key = self._instance_key(instance)
            mor_list = self.morlist[i_key].items()
            for mor_name, mor in mor_list:
                external_host_tags.append((mor['hostname'], {SOURCE_TYPE: mor['tags']}))

        return external_host_tags

    @atomic_method
    def _cache_morlist_raw_atomic(self, i_key, obj_type, obj, tags, regexes=None):
        """ Compute tags for a single node in the vCenter rootFolder
        and queue other such jobs for children nodes.
        Usual hierarchy:
        rootFolder
            - datacenter1
                - compute_resource1 == cluster
                    - host1
                    - host2
                    - host3
                - compute_resource2
                    - host5
                        - vm1
                        - vm2
        If it's a node we want to query metric for, queue it in self.morlist_raw
        that will be processed by another job.
        """
        ### <TEST-INSTRUMENTATION>
        t = Timer()
        self.log.debug("job_atomic: Exploring MOR {0} (type={1})".format(obj, obj_type))
        ### </TEST-INSTRUMENTATION>
        tags_copy = deepcopy(tags)

        if obj_type == 'rootFolder':
            for datacenter in obj.childEntity:
                # Skip non-datacenter
                if not hasattr(datacenter, 'hostFolder'):
                    continue
                self.pool.apply_async(
                    self._cache_morlist_raw_atomic,
                    args=(i_key, 'datacenter', datacenter, tags_copy, regexes)
                )

        elif obj_type == 'datacenter':
            dc_tag = "vsphere_datacenter:%s" % obj.name
            tags_copy.append(dc_tag)
            for compute_resource in obj.hostFolder.childEntity:
                # Skip non-compute resource
                if not hasattr(compute_resource, 'host'):
                    continue
                self.pool.apply_async(
                    self._cache_morlist_raw_atomic,
                    args=(i_key, 'compute_resource', compute_resource, tags_copy, regexes)
                )

        elif obj_type == 'compute_resource':
            if obj.__class__ == vim.ClusterComputeResource:
                cluster_tag = "vsphere_cluster:%s" % obj.name
                tags_copy.append(cluster_tag)
            for host in obj.host:
                # Skip non-host
                if not hasattr(host, 'vm'):
                    continue
                self.pool.apply_async(
                    self._cache_morlist_raw_atomic,
                    args=(i_key, 'host', host, tags_copy, regexes)
                )

        elif obj_type == 'host':
            if regexes and regexes.get('host_include') is not None:
                match = re.search(regexes['host_include'], obj.name)
                if not match:
                    self.log.debug(u"Filtered out VM {0} because of host_include_only_regex".format(obj.name))
                    return
            watched_mor = dict(mor_type='host', mor=obj, hostname=obj.name, tags=tags_copy+['vsphere_type:host'])
            self.morlist_raw[i_key].append(watched_mor)

            host_tag = "vsphere_host:%s" % obj.name
            tags_copy.append(host_tag)
            for vm in obj.vm:
                if vm.runtime.powerState != 'poweredOn':
                    continue
                self.pool.apply_async(
                    self._cache_morlist_raw_atomic,
                    args=(i_key, 'vm', vm, tags_copy, regexes)
                )

        elif obj_type == 'vm':
            if regexes and regexes.get('vm_include') is not None:
                match = re.search(regexes['vm_include'], obj.name)
                if not match:
                    self.log.debug(u"Filtered out VM {0} because of vm_include_only_regex".format(obj.name))
                    return
            watched_mor = dict(mor_type='vm', mor=obj, hostname=obj.name, tags=tags_copy+['vsphere_type:vm'])
            self.morlist_raw[i_key].append(watched_mor)

        ### <TEST-INSTRUMENTATION>
        self.histogram('datadog.agent.vsphere.morlist_raw_atomic.time', t.total())
        ### </TEST-INSTRUMENTATION>

    def _cache_morlist_raw(self, instance):
        """ Initiate the first layer to refresh self.morlist by queueing
        _cache_morlist_raw_atomic on the rootFolder in a recursive/asncy approach
        """

        i_key = self._instance_key(instance)
        self.log.debug("Caching the morlist for vcenter instance %s" % i_key)
        if i_key in self.morlist_raw and len(self.morlist_raw[i_key]) > 0:
            self.log.debug(
                "Skipping morlist collection now, RAW results "
                "processing not over (latest refresh was {0}s ago)".format(
                    time.time() - self.cache_times[i_key][MORLIST][LAST])
            )
            return
        self.morlist_raw[i_key] = []

        server_instance = self._get_server_instance(instance)
        root_folder = server_instance.content.rootFolder

        instance_tag = "vcenter_server:%s" % instance.get('name')
        regexes = {
            'host_include': instance.get('host_include_only_regex'),
            'vm_include': instance.get('vm_include_only_regex')
        }
        self.pool.apply_async(
            self._cache_morlist_raw_atomic,
            args=(i_key, 'rootFolder', root_folder, [instance_tag], regexes)
        )
        self.cache_times[i_key][MORLIST][LAST] = time.time()

    @atomic_method
    def _cache_morlist_process_atomic(self, instance, mor):
        """ Process one item of the self.morlist_raw list by querying the available
        metrics for this MOR and then putting it in self.morlist
        """
        ### <TEST-INSTRUMENTATION>
        t = Timer()
        ### </TEST-INSTRUMENTATION>
        i_key = self._instance_key(instance)
        server_instance = self._get_server_instance(instance)
        perfManager = server_instance.content.perfManager

        self.log.debug(
            "job_atomic: Querying available metrics"
            " for MOR {0} (type={1})".format(mor['mor'], mor['mor_type'])
        )

        available_metrics = perfManager.QueryAvailablePerfMetric(
            mor['mor'], intervalId=REAL_TIME_INTERVAL)

        mor['metrics'] = self._compute_needed_metrics(instance, available_metrics)
        mor_name = str(mor['mor'])

        if mor_name in self.morlist[i_key]:
            # Was already here last iteration
            self.morlist[i_key][mor_name]['metrics'] = mor['metrics']
        else:
            self.morlist[i_key][mor_name] = mor

        self.morlist[i_key][mor_name]['last_seen'] = time.time()

        ### <TEST-INSTRUMENTATION>
        self.histogram('datadog.agent.vsphere.morlist_process_atomic.time', t.total())
        ### </TEST-INSTRUMENTATION>

    def _cache_morlist_process(self, instance):
        """ Empties the self.morlist_raw by popping items and running asynchronously
        the _cache_morlist_process_atomic operation that will get the available
        metrics for this MOR and put it in self.morlist
        """
        i_key = self._instance_key(instance)
        if i_key not in self.morlist:
            self.morlist[i_key] = {}

        batch_size = self.init_config.get('batch_morlist_size', BATCH_MORLIST_SIZE)

        for i in xrange(batch_size):
            try:
                mor = self.morlist_raw[i_key].pop()
                self.pool.apply_async(self._cache_morlist_process_atomic, args=(instance, mor))
            except (IndexError, KeyError):
                self.log.debug("No more work to process in morlist_raw")
                return

    def _vacuum_morlist(self, instance):
        """ Check if self.morlist doesn't have some old MORs that are gone, ie
        we cannot get any metrics from them anyway (or =0)
        """
        i_key = self._instance_key(instance)
        morlist = self.morlist[i_key].items()

        for mor_name, mor in morlist:
            last_seen = mor['last_seen']
            if (time.time() - last_seen) > 2 * REFRESH_MORLIST_INTERVAL:
                del self.morlist[i_key][mor_name]

    def _cache_metrics_metadata(self, instance):
        """ Get from the server instance, all the performance counters metadata
        meaning name/group/description... attached with the corresponding ID
        """
        ### <TEST-INSTRUMENTATION>
        t = Timer()
        ### </TEST-INSTRUMENTATION>

        i_key = self._instance_key(instance)
        self.log.info("Warming metrics metadata cache for instance {0}".format(i_key))
        server_instance = self._get_server_instance(instance)
        perfManager = server_instance.content.perfManager

        new_metadata = {}
        for counter in perfManager.perfCounter:
            d = dict(
                name = "%s.%s" % (counter.groupInfo.key, counter.nameInfo.key),
                unit = counter.unitInfo.key,
                instance_tag = 'instance'  # FIXME: replace by what we want to tag!
            )
            new_metadata[counter.key] = d
        self.cache_times[i_key][METRICS_METADATA][LAST] = time.time()

        self.log.info("Finished metadata collection for instance {0}".format(i_key))
        # Reset metadata
        self.metrics_metadata[i_key] = new_metadata

        ### <TEST-INSTRUMENTATION>
        self.histogram('datadog.agent.vsphere.metric_metadata_collection.time', t.total())
        ### </TEST-INSTRUMENTATION>

    def _transform_value(self, instance, counter_id, value):
        """ Given the counter_id, look up for the metrics metadata to check the vsphere
        type of the counter and apply pre-reporting transformation if needed.
        """
        i_key = self._instance_key(instance)
        if counter_id in self.metrics_metadata[i_key]:
            unit = self.metrics_metadata[i_key][counter_id]['unit']
            if unit == 'percent':
                return float(value) / 100

        # Defaults to return the value without transformation
        return value

    @atomic_method
    def _collect_metrics_atomic(self, instance, mor):
        """ Task that collects the metrics listed in the morlist for one MOR
        """
        ### <TEST-INSTRUMENTATION>
        t = Timer()
        ### </TEST-INSTRUMENTATION>

        i_key = self._instance_key(instance)
        server_instance = self._get_server_instance(instance)
        perfManager = server_instance.content.perfManager
        query = vim.PerformanceManager.QuerySpec(maxSample=1,
                                                 entity=mor['mor'],
                                                 metricId=mor['metrics'],
                                                 intervalId=20,
                                                 format='normal')
        results = perfManager.QueryPerf(querySpec=[query])
        if results:
            for result in results[0].value:
                if result.id.counterId not in self.metrics_metadata[i_key]:
                    self.log.debug("Skipping this metric value, because there is no metadata about it")
                    continue
                instance_name = result.id.instance or "none"
                value = self._transform_value(instance, result.id.counterId, result.value[0])
                self.gauge(
                    "vsphere.%s" % self.metrics_metadata[i_key][result.id.counterId]['name'],
                    value,
                    hostname=mor['hostname'],
                    tags=['instance:%s' % instance_name]
                )

        ### <TEST-INSTRUMENTATION>
        self.histogram('datadog.agent.vsphere.metric_colection.time', t.total())
        ### </TEST-INSTRUMENTATION>

    def collect_metrics(self, instance):
        """ Calls asynchronously _collect_metrics_atomic on all MORs, as the
        job queue is processed the Aggregator will receive the metrics.
        """
        i_key = self._instance_key(instance)
        if i_key not in self.morlist:
            self.log.debug("Not collecting metrics for this instance, nothing to do yet: {0}".format(i_key))
            return

        mors = self.morlist[i_key].items()
        self.log.debug("Collecting metrics of %d mors" % len(mors))

        vm_count = 0

        for mor_name, mor in mors:
            if mor['mor_type'] == 'vm':
                vm_count += 1
            if 'metrics' not in mor:
                # self.log.debug("Skipping entity %s collection because we didn't cache its metrics yet" % mor['hostname'])
                continue

            self.pool.apply_async(self._collect_metrics_atomic, args=(instance, mor))

        self.gauge('vsphere.vm.count', vm_count, tags=["vcenter_server:%s" % instance.get('name')])

    def check(self, instance):
        if not self.pool_started:
            self.start_pool()
        ### <TEST-INSTRUMENTATION>
        self.gauge('datadog.agent.vsphere.queue_size', self.pool._workq.qsize(), tags=['instant:initial'])
        ### </TEST-INSTRUMENTATION>

        # First part: make sure our object repository is neat & clean
        if self._should_cache(instance, METRICS_METADATA):
            self._cache_metrics_metadata(instance)

        if self._should_cache(instance, MORLIST):
            self._cache_morlist_raw(instance)
        self._cache_morlist_process(instance)
        self._vacuum_morlist(instance)

        # Second part: do the job
        self.collect_metrics(instance)
        self._query_event(instance)

        # For our own sanity
        self._clean()

        thread_crashed = False
        try:
            while True:
                self.log.critical(self.exceptionq.get_nowait())
                thread_crashed = True
        except Empty:
            pass
        if thread_crashed:
            self.stop_pool()
            raise Exception("One thread in the pool crashed, check the logs")

        ### <TEST-INSTRUMENTATION>
        self.gauge('datadog.agent.vsphere.queue_size', self.pool._workq.qsize(), tags=['instant:final'])
        ### </TEST-INSTRUMENTATION>

if __name__ == '__main__':
    check, _instances = VSphereCheck.from_yaml('conf.d/vsphere.yaml')
    try:
        for i in xrange(200):
            print "Loop %d" % i
            for instance in check.instances:
                check.check(instance)
                if check.has_events():
                    print 'Events: %s' % (check.get_events())
                print 'Metrics: %d' % (len(check.get_metrics()))
            time.sleep(10)
    except Exception as e:
        print "Whoops something happened {0}".format(traceback.format_exc())
    finally:
        check.stop()


iCreate is the creative magazine for Apple computer users. Made for Mac users by Mac users, it provides sumptuously designed, essential content for Apple aficionados and switchers alike. Featuring in-depth tutorials in iMovie, iPhoto and the rest of the iLife applications as well as iTunes and Mac OS X, it is the magazine no Apple addict can be without. If Apple made a magazine, it would be iCreate. Please note: Digital versions of the magazines do not include the covermount items or supplements that you would find on printed editions.
Magazine covers are used for illustrative purposes only and you may not receive a copy of the particular issue depicted. Your subscription will include the most recent issue once your subscription begins. Magazine covers are the property of the publisher. This site is not officially affiliated with, associated with, or endorsed by iCreate (Digital) or the publisher.


text:
New Jersey Man Joins $1 Million-Winning Lottery Pool at Hospital After Breaking Hip on His Way to Buying Ticket
"I thought he was confused, maybe from pain meds. And then the staff came into the room and they were saying congratulations. And I was like, 'Wow, he really did win.'"
By Drew Smith and David Chang	• Published at 9:54 pm on October 24, 2018
A New Jersey man joined a $1 million-winning lottery pool at a local hospital after breaking his hip while walking to buy a ticket.
Earl Livingston fell and broke his hip while walking to buy a lottery ticket. He was taken to Jefferson Stratford Hospital.
Staff at the hospital allowed him to join their lottery pool which ultimately included a $1 million-winning ticket.
A New Jersey man literally got a lucky break when he joined a $1 million-winning lottery pool at a local hospital after breaking his hip while walking to buy a ticket.
Earl Livingston, 87, of Blackwood, New Jersey, was walking to the store Tuesday to pick up a lottery ticket when he fell and broke his hip. He was taken to Jefferson Stratford Hospital, where he shared his story with staff members.
"He told them he was on his way to buy a lottery ticket and he was disappointed that he didn't get it," Livingston's niece, Bobbie Mickle, told NBC10. "So they said, 'Why don't you go in with us? We're also buying a lottery ticket.'"
A physician's assistant welcomed Livingston into the hospital's lottery pool along with 141 others. That pool ended up including a winning, $1 million ticket purchased in Lindenwold, New Jersey.
Jefferson Stratford Hospital
"I didn't believe him when I got here," Mickle said. "I thought he was confused, maybe from pain meds. And then the staff came into the room and they were saying congratulations. And I was like, 'Wow, he really did win.'"
Wynnefield Heights 2 hours ago
Wrongful Conviction 2 hours ago
Livingston will need a hip replacement. But he has a nice remedy for the pain thanks to a kind hospital staff and a little bit of luck.
"I want to thank everybody," Livingston said. "I appreciate very much and God bless you and have a happy, happy long life!"

redpajama_set_name: RedPajamaCommonCrawl


text:
Eva March Tappan
That Which He Would Have
"C OME to the window, Ermenoldus. See how the country stretches out,—fields and vineyards and corn land! There's no richer ground in the whole duchy of Normandy."
"You and Duke Richard rule it together, do you not, my lord?"
"No. We hold it together after a fashion, but he rules. I am his vassal. Hiesmes is mine, and this goodly castle of Falaise ought to go with it."
"Was the duke your father's favorite, my lord?"
"Doesn't it look like it, when he left me only Hiesmes and then cut off the best part of it for Richard?"
"Could it have been suggested to him, my lord?"
"You mean, did Richard tell him to do it," said Count Robert bluntly. "Who knows what one man has said to another? Richard was with him from morning till night. My father called him a 'good youth.' I suppose I was a bad one," and the young man laughed recklessly. "Anyway, Richard is Duke of Normandy, and I am only the Count of the Hiesmois; and here I am in the village of Falaise that ought to be mine, collecting taxes that ought to be mine, and putting them safely away for my brother in the treasure-room of the castle that ought to be mine."
"This castle seems to be of good strength, my lord. The walls are thick and heavy. It would not be easy to batter them down. It stands at the very edge of the cliff, and the cliff falls down sheer to the valley. No one could approach on that side."
"No; it's a strong castle, but I have none that could not be captured in a day. Come to the window again, Ermenoldus. See what a mass of rook the castle is built on, and how it juts out over the valley! Across the Ante is that other great, jagged precipice. You're a wizard, Ermenoldus; I verily believe you are. Couldn't you build me a castle on Mount Mirat yonder that would be as strong as this?"
I'm not enough of a wizard to give you a castle, my lord," said Ermenoldus; "and yet, there's more than one way," he half whispered. Count Robert did not hear the whisper, for he had turned again to the narrow window.
"If those girls are as pretty as they are graceful and merry," he said, "they would be well worth seeing. Ermenoldus, will you call some one to get my horse? or, if you stamp three times on the stone under your feet, won't the horse come of its own accord, all saddled and bridled?"
"You think too highly of the little that I have learned," said Ermenoldus.
"I'm not sure, though," said the count laughing, "but you are in league with the fiend himself and know all that there is to be known. Whence do you come and whither do you go? You appear and then you disappear, and all I know is that you are gone."
"Never did I go faster than you will go to gaze upon the pretty maidens washing linen on the banks of the stream," said Ermenoldus; "only I beg you, my lord, don't ride down over the cliff in your haste. All my magic could not save you then;" but Count Robert was already at the gate, and the next minute he was galloping down the rough, rocky way that led to the foot of the cliff.
The linen had been spread out on the grass to dry and to whiten in the hot sun, and the young girls were frolicking in the ripples of the little stream, laughing and splashing water at one another. One had bent down a green bough and held it in front of her face to protect it.
"By my faith!" said Count Robert to himself, "if that maiden's face is as fair as her little feet are white, she's prettier than all the high-born dames at my brother's castle." Just then the maiden let go the green branch and it sprang up above her head.
"Let's dance," she said, "not splash water at one another like children."
"That's a fairer face than I ever saw before," thought the count, as he stopped his horse, and hidden by the trees, gazed at the young girls in their playful imitation of the village dance, their white feet now twinkling in the green grass on the river's brink, and now splashing rainbow drops around them.
"See how high the sun is," said one of the girls. "The linen is dry, and we must go home."
"I'm tired. I'm going to rest awhile here under the trees before I go," said the maiden of the green branch.
"But the sun is almost overhead," said one girl. "Won't your mother beat you if you do not come?"
"Beat? What is that? No one ever beats me," she replied indifferently. "You carry the linen home for me, and I will come when I have had my little nap. Good-by, my friends," and she waved them a farewell as she sat on the bank with her head on her hand, half reclining on the soft green grass in the shadow of the trees.
"Well, if that isn't Arletta!" said one young girl. "She commands us to carry home her linen for her, and we obey. We always do just what she tells us to. Listen! Now she is singing. If I stayed after the washing was done to sleep on the bank and to sing songs, I should have a sound beating, but Arletta always does what she likes." The maidens went slowly down the valley. Arletta half closed her eyes, and sang softly to herself.
"And may I listen to the pretty song?" said a voice coming so suddenly that it seemed to be just at her ear. Arletta sprang to her feet and made a humble courtesy, and then stood still, too abashed to look up. The rider had dismounted and stood holding his hat with its long plume in one hand and the horse's bridle in the other.
"Are you one of the maidens of Falaise?" he asked, and then smiled at the idle question, for where else could she belong?
"I'm Arletta," she answered, looking up shyly, "and my father is Fulbert the tanner."
"Strange that such a flower should blossom in the foul garden of a tanner," said Robert to himself.
"Are you the great Duke Richard?" asked the maiden.
"No, I'm not," said Robert half gloomily. "I'm nobody but Count Robert, his younger brother; and I haven't even a strong castle to bless myself with. But you must be tired. Isn't this washing too hard work for a girl like you?"
"Oh, no, I am strong," she said. "All the girls come out here to wash the linen for their homes."
"Shouldn't you rather stay at home and have some one to wash the linen for you? When you braid your hair, you could braid in a cord of shining gold, and you could wear a silken mantle and fasten it with a golden clasp."
"But it is only the great ladies in castles who wear silken mantles and braid gold in their hair," said Arletta, smiling, nevertheless, at the thought of so much luxury.
"And should you like to have a young man ride up on a great black horse to see you? He would have a feather in his hat, and perhaps he would wear a gold chain, if he is only a count, and he might bring you one day a jewelled band for your hair, and another day a veil of silken tissue, or perhaps a mantle of silk or of velvet. Should you like it?" Arletta said nothing, but her cheeks were bright red. Her eyes were bent on the ground, but when she ventured to look up for a moment, they were glittering with excitement.
"Farewell, my pretty Arletta," said he, "but it will not be many days before you will hear from me." He sprang upon his horse, kissed his hand to her gayly, and rode away, the horse's hoofs clattering on the fragments of stone in the road.
Whatever were Robert's faults, no one could accuse him of putting off what he meant to do, and it was only the next day when Fulbert came meekly from his tan-yard at the demand of the young noble.
"I have seen many a high-born maiden," said Robert without a word of explanation or preface, "and your daughter pleases me better than all of them. I would have her as the lady of the castle. Will you send her to me to-morrow?"
"The child of a tanner cannot well consort with the lord of a castle," said the father bravely, but with a trembling voice.
"And I have no castle worthy of the name," said Count Robert bitterly, "but I suppose that I may have a bride."
"The great folk have the power to take whom they will," said the tanner, his voice choking in his throat, "but I would have had my daughter wed one of her own station, and not in the castle but in the little church; and I wanted my kinsfolk and her mother's to look at her and smile upon her, and then to come to our house and rejoice that Arletta was going to her own home with the one that she had chosen."
"As you will," said the count, with pretended indifference; "but before you refuse, ask the girl herself. If she says no, I will leave her; but should she choose to say yes, you shall lose nothing by having your daughter the bride of a noble."
In the tiny inner room of the cottage stood Arletta, trembling and flushing.
"Hasten, Arletta," said her mother, Doda. "Hasten, and put on your best robe, the gray with the blue belt. He will go. A count will not wait long for a tanner's daughter. Tell him that you are ready—but, no; tell him that you will agree if—no, that will not do; ask him humbly if he would not rather that his bride were the daughter of a brewer than of a tanner; and tell him that if he would only give your father the gold to become a brewer, he would not be shamed that you have come from the home of a tanner."
"But perhaps I do not wish to go to the castle," said Arletta indifferently. "Perhaps I would rather walk to the church with all the village maidens, and have a wedding feast."
"Arletta, why will you torment me? Hasten; I do not hear a sound. Perhaps he is already gone. One would think you had no idea how great an honor it is. Don't you know that he can wed whom he will?"
"The one that weds me will be the one that I will," said Arletta.
"You are a proud, undutiful girl," said Doda. "Pull those folds more on the shoulders, and draw the girdle to the right. There, I hear his voice again. He has not gone."
"No, he has not gone," said Arletta, with a peculiar little smile, and she went forward slowly, till she stood in the opening between the two rooms. The soft gray garment hung in long folds from her shoulders, and was confined at the waist by a blue belt. Her cheeks were red, and her eyes shone.
"Go to him. Tell him you are sorry you have kept him so long," whispered Doda, twitching her daughter's robe, for she had crept up softly behind the girl. But Arletta did not take even a single step through the opening. She stood with one foot drawn back, as if she might disappear in a moment. So beautiful she was that Robert bent on one knee before her, and kissed her hand as if she had been some maiden of high degree.
"The next time that I see you, shall it be in the castle? Will you come to me, Arletta?"
"Say yes," whispered her mother, and even Fulbert had begun to realize that this was a great opportunity, and to fear lest the wayward damsel should refuse so lordly a suitor.
"Will you come, Arletta?" asked the count gently, looking eagerly into her eyes.
"Yes, I will come," said Arletta, with slow graciousness, and with a touch of condescension in manner that would have seemed to belong to a princess rather than to a simple maiden of the people. The count slipped about her neck a slender gold chain with a pearl in every link.
"That is to hold you fast," he said. "The castle is a grim and dreary place; but I know where there is a little door that leads to a chamber the thickness of the wall. It is dark and gloomy now, but people who are wise in using colors shall paint the walls with blue and gold and vermilion. The hangings shall be of silk, and every day the straw on the floor shall be bright with fresh flowers; and there shall you abide, and, tanner's daughter as you are, you shall be treated as if you were a king's daughter."
"Tell him you are grateful," whispered Doda anxiously, but Arletta only smiled slightly, with the air of one conferring a favor. The count sprang upon his great black horse, and went his way to the castle.
As he dropped his bridle into the hands of a servant, he asked:—
"And where is Ermenoldus?"
"Truly, my lord, I do not know," said the man. "He was here, and then he was not here, and when he was here he said, 'Tell my lord there is a message from me,' and then he was not here."
"Folly! no man could leave the castle unless the gate was opened for him. If you are telling me false, I'll have you thrown from the top of the cliff."
"Indeed, my lord, it is true," said the servant earnestly. "He was here, and then he was not here, and he said there was a message for you that you could read only in the glow of the fire."
"I believe the man is in league with the fiend," said Robert to himself. "To leave me just when I wanted him most!"
That night, when the count went to his bed, there lay on his pillow a scroll, closely tied with a golden cord that was wrought into an intricacy of many twists and coils. Impatiently he struggled with the knot.
"There's surely magic about it," he said, "and I have heard that if one cuts a magic knot, the wizardry will all turn against him," so he pulled and turned and twisted the golden thread, until all of a sudden it seemed to fly apart of its own accord under his fingers. Apparently nothing was written on the scroll, but as he held it half fearfully before the fire in the castle hall, there came out, letter by letter, a message. He read it slowly, for he was more used to reading the faces of men than lettering on parchment. It was this:—
"When one holds that which he would have, let him see to him see to it that he hold it fast."
"Indeed I will," he said under his breath. "Arletta is mine, and the workmen shall work as never before, and if the little room in the tower is not ready in two days, some one shall go into the dungeon."
No one was thrown into the dungeon, for on the second day the little chamber in the wall was as bright and cheery as a place could be that had but a single window, and that a tiny one. However, people thought more of safety than of sunlight in those days, and the smallness of the opening was looked upon as an advantage. The frowning vaulting of the gray stonework that made the top of the room was hidden by a light blue coloring, half veiled by a graceful scrollwork of gold. All about the little window the stone was stained a deep, rich vermilion, and the walls were hung with heavy silken tapestries of a clear, sunny yellow. The floor was strewn with the softest of straw, and over it were sprinkled fresh roses from which the pages had removed every thorn. With precious stones—cut from the count's mantle of state—hung here and there on the walls, the little room flashed when the door was thrown open as if it was full of humming-birds.
All was ready, and Robert sent a chamberlain for Arletta. Behold, he returned without the village maiden!
"She would not come with me," he explained. "She said she would not come to the castle as a serving maid, she would come as the bride of a great lord; and she bade me return, if you were of the same mind, with an escort of palfreys well caparisoned, and with a due attendance. 'I do not go to the castle to beg,' she said—and O my lord, she looked like a queen when she said it—'I go of my own will, and as the free maiden daughter of a gallant man. I will not creep up hill with a single chamberlain as my escort. If I am worth having, I am worth sending for in proper state. Then, too, the count has sent me no finely woven robe and no silken mantle. I have nothing save what is the gift of my father. Would he have me come to him wearing the gift of a tanner, or would he have me wear nothing at all but the little chain of gold and pearls?' Then she turned away, and I saw her no more." The count laughed.
"I like her the better for it," said he. "And now do you make up an escort as you would for the daughter of a duke. Carry her the handsomest tunic and mantle to be found in the castle. Choose the best palfreys, and have them as well groomed and as handsomely caparisoned as for a queen. Let twenty men-at-arms go with you, and see to it that you delay not in going. As for the coming, the fair Arletta will choose her own pace."
The little procession went forth and made its way along the rocky road to the home of the tanner. Robert watched it eagerly as it carne slowly up the hill. At the castle gate there was a halt.
"Throw the gates open wide," he heard a low, clear voice say. "I am not an uninvited guest. I come here at the wish of the count and of my own free will."
"Let him see to it that he hold it fast," said Robert, "and that I will," and he hastened to welcome the fair Arletta.
Month after month passed away, but the charm of the tanner's daughter for the young count did not grow less. Whether she met him in her plain gray gown, with the playful humility of a village maiden, or in the rich robes of the lady of the castle, to whom all must do honor, and with a pride and haughtiness equal to that of the count's aristocratic grandfather, Richard the Fearless, she was equally fascinating to Count Robert. His brother's interests were forgotten. Of his own he took no heed. It began to be whispered that he would not willingly depart from the castle of Falaise.
Now Normandy and the districts round about were swarming with people, too many for even so fertile a country to nourish. The land had been divided and subdivided until the share of a man would no longer support those who were in helpless dependence upon him. There was restlessness everywhere. The women of the household must abide at home; nowhere else was there protection or safety. The fathers of families must struggle on as best they could; but the young men were held back by no question of fear, bound by no demands of any who were dependent upon them. From one domain to another they wandered, ready to throw themselves vehemently into whatever cause might come to hand. They were any man's soldiers if he would pay them well. They would follow the sound of the tinkling silver wherever it might lead.
The country about was full of such men, and at the first whisper of the count's unwillingness to leave Falaise, they hastened to the castle. The weapon lay at Robert's hand. Would he use it? One of the boldest of the young soldiers made his way to the count.
"Here we are," he said, "and here are our weapons. Can you make use of us and of them? We will fight for you bravely and faithfully."


NB: The notation '[DP]' in a rule in the Sailing Instructions means that the penalty for a breach of that rule may, at the discretion of the protest committee, be less than disqualification.
1.2 Yachting New Zealand Prescriptions 2017-2020 shall apply.
1.3 The Yachting New Zealand Safety Regulations Part 1 shall apply. Life Jackets must be worn.
1.4 All competitors will be required to carry means of visual communication. Smoke flares are recommended.
1.5 The sailing instructions will consist of the instructions in RRS Appendix S, Standard Sailing Instructions, and supplementary sailing instructions that will be on the official notice board located at 39 The Strand Takapuna.
There shall be no advertising that conflicts with the event's sponsors.
3.1 The regatta is open to all boats of the Foiling and Skiff class(es).
3.2 Eligible boats may enter by completing the attached form and sending it, together with the required fee, to manager@takapunaboating.org.nz by 5pm on 24 April 2018.
3.3 Late entries will be accepted under the following conditions: Payment of $60.00 late entry fee subject to fleet numbers.
3.4 The following restrictions on the number of boats apply: The event is open to a maximum of 40 entries. First come: first served.
3.6 Each competitor, entrant and crew members shall be capable of sailing the course in under three hours.
3.7 To demonstrate their competence, each Competitor shall have competed in a National or Regional championship or previously completed the course. The organising committee reserves the right to refuse entry or impose additional safety requirements on any competitor it considers unlikely to complete the course.
5.4 Number of races: There will be one race. 28th April is a reserve day.
The sailing instructions will be available after 5pm on 24 April at 39 The Strand Takpauna.
7.1 Attachment A shows the location of the regatta venue.
7.2 Attachment B shows the location of the racing areas.
All entrants shall start from a line between the signal boat and a laid mark approx. 1nm NE of the Takapuna Boating Club Clubhouse rounding Rangitoto and Motutapu islands in an anticlockwise direction and finish between the signal boat and the same laid mark.
9.1 For all class(es) RRS 44.1 is changed so that the Two-Turns Penalty is replaced by the One-Turn Penalty.
Competitors participate in the regatta entirely at their own risk. See RRS 4, Decision to Race. The organising authority will not accept any liability for material damage or personal injury or death sustained in conjunction with or prior to, during, or after the regatta.
I agree to be bound by the Racing Rules of Sailing and all other rules that govern this event. I understand that yacht racing has inherent risks and dangers that are beyond the control of the organizing authority. I understand that neither the organising authority and its officers, members and servants nor other persons assisting with the conduct of the regatta accept any responsibility in respect of any injury or loss to person or property that may be sustained by reason of participation in the regatta or howsoever arising in connection with the regatta.
I agree to the use of my photograph(s) and other relevant information in any event publicity and in the ongoing promotion of New Zealand yachting. I agree to the Organising Authority and Yachting New Zealand holding the above information for the general administration and well-being of the sport, and for them to retain, use and disclose the information to affiliated organisations and any other persons or organisations that Yachting New Zealand believes will further the interests and objectives of Yachting New Zealand. I acknowledge my right to access to and correction of this information. The consent is given in accordance with the Privacy Act 1993.


We present results on several new search channels and strategies for heavy vector-like quark partners or vector resonances at the LHC run-II. Run-II has sensitivity to single- and pair-produced quark partners with masses beyond 1 TeV, and for even higher masses for vector resonances. Decays of such heavy particles yield highly boosted tops, Higgses, and weak gauge bosons. At high boost, the Standard Model background of hadronic final states can be substantially suppressed when applying jet-substructure techniques. We present several case studies where the identification of hadronically decaying tops, Higgses, and/or electroweak gauge bosons allow to make new search channels competitive at run-II.


Doriana Zohil-Morton was personally invited by Worldwide ERC (Employee Relocation Council) President & CEO Peggy Smith to be part of the dialogue/conversation about mobility. This light-hearted conversation focused on what's impacting our industry, and diversity & inclusion. Leadership Unplugged taps into the thought processes and unique perspectives of industry leaders.
Watch Doriana's interview below, which took place at the ERC Global Workforce Symposium in Seattle.


text:
Fugitives Hide In Big Backlog Of Warrants
By David B. Ottaway
For more than 25 years, Robert Jackson Crutchfield, a convicted murderer and escapee from a halfway house here, easily evaded the long arm of the law even after he was branded one of the District's most-wanted fugitives.
By changing his name to Robert Lee Dillon and obtaining a new driver's license in West Virginia, Crutchfield, 51, was able to avoid detection among 500,000 names in a database of wanted felons kept by the FBI'S National Crime Information Center (NCIC).
Then, by pure chance, Crutchfield was discovered in mid-March, living what the local sheriff called "the good life" in small Denton, N.C. Federal marshals flew him back to the District last month to stand trial.
Crutchfield's evasion of arrest for a quarter century highlights one of the most intractable problems faced by law enforcement nationwide: finding criminals lost in huge backlogs of outstanding arrest warrants. With courts churning out thousands of new warrants each year and law enforcement agencies ill-equipped to keep up, it has become ever more likely that serious felons, many of them repeat offenders, will evade detection.
Law enforcement officials say there are hundreds of thousands of Crutchfields living under assumed names, amended birth dates and altered Social Security numbers. Their ranks are growing, even as computerized tracking systems become more sophisticated.
"You can't walk down the street today without passing somebody who is wanted," said William Bonk, a U.S. Marshals Service agent who formerly headed the D.C. Joint Fugitive Task Force of local and federal law enforcement agencies.
In most jurisdictions, a vast majority of the outstanding warrants--court orders authorizing police to pick someone up--involve minor offenses such as traffic violations, petty thefts or missed court dates. Yet these warrants clog up law enforcement computers and actually help serious felons escape notice, officials contend.
As Crutchfield's case shows, the apprehension of wanted criminals depends as much on pure chance as high-powered technology or gumshoe detective work.
"Most people wanted on a warrant still get picked up in traffic stops," said Lt. John Russell, an Arizona sheriff and National Sheriffs' Association fellow.
Warrant backlogs have reached gargantuan proportions in some states and in the Washington metro area, provoking controversy and a scramble for solutions.
California has 2.5 million unserved warrants, while Washington state counts 300,000. Massachusetts also has 300,000, with another 500,000 not yet recorded. A small but not insignificant number are for serious crimes. In California, for example, 2,600 are for homicides.
In the District and its suburbs, police and sheriff's departments are being pushed to either serve or purge outstanding warrants for offenses ranging from murder to misdemeanors. Prince George's County has 38,000; Montgomery County, 21,392; the District, 13,000; and Fairfax County, 4,100. In nearby Baltimore, the city and county have a staggering backlog of 61,000.
"Having so many outstanding warrants gives the impression that warrants are unimportant. If a warrant is issued, then it should be served," said Betty Ann Krahnke, the recently retired chairwoman of the Montgomery County Council's public safety committee.
Yet pressure to step up warrant service could prove counterproductive, since judicial systems are already stretched, some law enforcement officials say.
"The more arrests you make, the more the courts get overloaded, the more prosecutors you need and the more jails," said Charles "Bud" Meeks, interim executive director of the Alexandria-based National Sheriffs' Association.
In recent years, a series of tragedies has highlighted the sometimes deadly consequences of these backlogs.
In a 1996 Kentucky case, Sandra Colston was shot to death by her estranged husband, Donald, a paraplegic then confined to a wheelchair. A convicted robber, he had been wanted by police for violating parole. But faced with 9,000 other outstanding warrants, Kenton County, Ky., officers had not picked him up.
Charles Jaynes, who killed a 10-year-old Cambridge, Mass., boy in 1997, was wanted on 75 warrants from 18 different jurisdictions.
The problem hit home in suburban Maryland in January, when Janice Michelle Lancaster, 34, was slain by her estranged husband. An arrest warrant lay unprocessed in the Charles County district court clerk's office.
In March, George Trenton Bobbitt, 35, of Gaithersburg was sentenced to life in prison for the December 1998 shooting death of his former girlfriend, Zipporah Mack. Mack had obtained a warrant for Bobbitt's arrest on charges of attempted assault and kidnapping, but it was never served.
Crimes such as these have led officials in Montgomery and Prince George's counties to set up special committees to sift through thousands of old warrants, closing out those judged unserviceable and activating more serious ones. Officials acknowledge a treadmill quality.
"We've made a minor dent in our backlog and that was with every initiative we could pull out of our hats," said Sgt. Bill Ament, spokesman for the Prince George's County sheriff's office.
But the U.S. Marshals Service, ordered in 1998 by Attorney General Janet Reno to reduce its 24,000-warrant backlog, reported that its housecleaning paid off. In one year, the agency found 219 felons among "the worst of the bad" and caught three of its 15 Most Wanted, according to Arthur Roderick Jr., head of the service's fugitive investigations division.
One quick fix being discussed nationwide is linking criminal data centers to state motor vehicle bureaus and barring anyone with an outstanding warrant from renewing a driver's license.
"Right now, if you have an outstanding parking ticket, you can't get your license renewed. But if you have a murder warrant out on you, you still get your license renewed," said Mike Davis, spokesman for the Baltimore County Executive Office.
Lawmakers in Maryland recently passed legislation that takes effect July 1, barring people with outstanding warrants from renewing their licenses. Similar proposals are under consideration in California, Washington and Massachusetts.
Some law enforcement officials believe far more radical steps are needed to stanch the flood of misdemeanor warrants. Suggestions include establishing separate courts to handle minor drug and traffic violations, setting warrant expiration dates and imposing fines instead of so-called bench warrants on those who miss court appointments.
But Mark Spencer, Prince George's County deputy state's attorney, said he felt the backlog could be managed simply by setting up permanent review committees to regularly vet outstanding warrants.
Housecleaning In Montgomery
One by one, John McCarthy, Montgomery County's deputy state's attorney, read the case numbers of people wanted on 10-year-old misdemeanor warrants--a lady with an unlicensed dog, a homeless trespasser, a bad check writer, a petty thief.
It was boring work that took nearly two hours. But when McCarthy and three aides had sorted through the files in an overheated side room of the District Court building in Rockville, they had eliminated 500 cases from the county's backlog. (Another 2,000 were not yet entered into the tracking system.)
"You've got to use some common sense in the administration of justice," said McCarthy. "These were cases where there was no reason to hope we could prosecute."
The housecleaning serves a serious purpose.
"This is a process that will allow us to focus on the most serious cold cases," said Sgt. Michael Mancuso, head of the Montgomery County police department's fugitives unit.
No jurisdiction in the Washington suburbs has worked more diligently than Montgomery County to clear up outstanding warrants. County officials have produced three in-depth reports on the backlog since 1996. (The first surveyed eight area jurisdictions and concluded that all received more warrants than they could possibly serve.)
Three years ago, Montgomery launched a Warrant Reduction Initiative mobilizing additional personnel, including several AmeriCorps volunteers. It also installed a high-tech Criminal Justice Information System (CJIS) to track warrants.
The state's attorney's office last August began a crash program with the police department and District Court to identify all misdemeanor warrants no longer serviceable because of their age, unknown addresses or lack of witnesses. The three parties are using a Maryland statute empowering the court's chief justice to invalidate open misdemeanor warrants after three years.
Nevertheless, at first the backlog kept growing, by 3,600 from 1995 to 1998. Last year, for the first time, it dropped, but only by 5.4 percent. The biggest improvement has been in the percentage of the almost 14,000 new warrants that county police and deputies serve each year: It rose from 67 percent in 1996 to 97 percent last year.
Police want to reduce the backlog to 5,000 within five years. But John A. Danskey Jr., who heads the department's warrant unit, said he needs at least nine more officers to accomplish the goal.
Krahnke, too, has doubts. "The current plan won't get us where we need to be," she said in a written statement.
Closing Out Cases In Prince George's
The first thing troubleshooter Alan V. Cecil did last year upon joining Prince George's County's special Stale Warrant Team was to seek advice on dealing with the county's 38,500-case backlog.
"We figured there must be a protocol for dealing with [the backlog] because this is a national problem," he said.
But he quickly discovered there was no "Rosetta stone," not even any useful advice from most other cities and states, according to deputy state's attorney Mark Spencer, who is Cecil's boss.
Since last July, Cecil, who deals with special projects, has been helping devise a protocol. His team had sifted through thousands of cases--some still recorded on 3-by-5 index cards--to decide which warrants would still stand up in court.
So far, the team has closed out 4,500 cases--1,000 simply because the defendants are dead. Hundreds dating back to the 1960s could not be served because the arresting officer was dead or retired. Hundreds involved complaints against companies now out of business.
Then there were the cases of wanted criminals already in jails. "There is a core of 5,000 who we know are locked up in other counties or cities, but the warrants are still open here," said Capt. James M. Tabb, coordinator of the sheriff's office warrant unit. (Warrants issued in one jurisdiction remain valid even if a person is serving time in another.)
Those sorting out the mess wonder if their efforts are futile because the sheriff's office, reeling from deep budget cuts, doesn't have the manpower to follow up. Since 1994, the force has dropped from 310 to 190, and the warrants unit has decreased from 28 officers to six.
Still, spokesman Bill Ament said the agency has tried. It has tapped federal food stamp records for current addresses of criminals, conducted month-long roundups and participated in federal stings.
Ament's conclusion: "Unless additional resources are allocated to this effort, it's going to take years to get rid of this backlog."
Annapolis Rebuffs A Joint Aid Request
In early February, Baltimore authorities discovered that two suspects in the slaying of a county police officer, Sgt. Bruce A. Prothero, had outstanding warrants. Suspect Donald White had three, including one for a charge of attempted murder. Suspected gunman Richard Moore had one.
A week after Prothero's death on Feb. 7, Baltimore Mayor Martin J. O'Malley and Baltimore County Executive C.A. Dutch Ruppersberger proposed to Gov. Parris N. Glendening using $5.8 million in state money to establish a 60-person Joint Warrant Task Force.
The crux of Baltimore's crime problem, they argued, was a small number of repeat offenders. Many, like White and Moore, had outstanding warrants.
But the letter evoked no support from Annapolis.
State officials questioned O'Malley's commitment to providing city funding for a warrant squad and asked how the city could devote 30 officers to the proposed task force when it could not fill 234 vacancies.
"That's a local matter. The state is not prepared to get involved," said Michelle Byrnie, a Glendening spokeswoman.
Baltimore County is getting 28 new officers under a $22 million U.S. Department of Justice grant. But Byrnie said the county plans to use them to beef up patrols along high-crime commercial corridors--not to serve more warrants.
A District Fugitive's Number Comes Up
Police in Denton didn't need to go looking for Crutchfield. His friends did the work for them. His undoing came after a domestic squabble--much like the May 1971 incident in which he fatally stabbed his sister's boyfriend at 330 Ninth St. NE.
Crutchfield was serving the last months of his sentence in a halfway house when, on Jan. 28, 1975, he fled the District. He disappeared from law enforcement radar until March 10 this year, when his girlfriend's son pressed charges after a quarrel.
When he learned there was a warrant for his arrest, Crutchfield dutifully surrendered, and went home after posting a $500 bond. Soon afterward, a tipster urged Davidson County Sheriff Gerald K. Hege to check Crutchfield's history in the District.
Hege turned to the NCIC database and put in Crutchfield's alias--Robert Lee Dillon. Nothing turned up. Then he entered Crutchfield's Social Security number.
Bingo, a hit.
Hege notified the Marshals Service, and on March 13, officers picked up Crutchfield, who did not resist.
"We went up and called him by his real name," said Hege. "He replied, 'That's me.' "
Staff researcher Alice Crites contributed to this report.
Montgomery County Warrants Backlog
There were 21,392 unserved items in the database on 12/1/99, including criminal, traffic and civil cases.
Total issued
Criminal 13,853 64%
Traffic 6,962 33%
Civil 577 3%
Police 19,695 92%
Sheriff 1,697 8%
* 18,486 (86.4%) of the unserved warrants were issued for persons with different names.
* 12,632 (59.1%) of the unserved warrants were issued for failure to appear in court.
SOURCE: County


text:
This site is designed to work best in modern browsers. Internet Explorer is not supported.
Outpatient Addiction Treatment : Medication Assisted Therapy Utilizing Suboxone and Vivitrol
REQUEST APPOINTMENT PAY BILL
Spero expanding services, locations – PE-backed addiction treatment firm opened 24 new clinics in 2021
Brentwood-based outpatient addiction treatment company Spero Health is launching a slew of new services in 2022 and has announced intent to expand into West Virginia and North Carolina at the beginning of the year.
The three-year-old, private equity-backed firm will provide substance abuse disorder treatment services across seven states after the expansion. Spero currently operates 70 locations, and in 2021 alone, opened 24 clinics across Kentucky, Indiana, Ohio, Tennessee and Virginia.
Last year the company reported 500,000 patient visits spanning clinical, counseling and other recovery services. In the coming months, Spero leadership plans to include treatment for Hepatitis C, an intensive outpatient program and individualized wellness plans. The treatment packages will include telehealth, peer support groups, psychiatric services and education resources, among other options, according to a press release.
The expansion is supported by a long list of local investors, including Nashville-based Heritage Group, Health Velocity Capital, South Central and Frist Cressey Ventures, which upon their initial investment expressed a need for affordable community-based solutions to combat the opioid epidemic.
"Last year, we opened 24 new Spero Health clinics and are on track to open even more in 2022, to bring life-changing results as we live our mission of Saving Lives, Instilling Hope and Restoring Relationships in communities really struggling. While we celebrate the progress we have made in the lives changed through recovery, we know that there is much work to be done to combat this epidemic," CEO Steve Priest said in the release.
Instilling Hope
Restoring Relationships
info@sperohealth.com
© 2022 Spero Health


text:
pedophile hunters
Tag: pedophile hunters
Dutch police give 'stop paedophile hunts' warning after Arnhem death
November 14, 2020 R H
[bbc.com – 11/13/20] A Dutch police chief has called for an end to "paedophile hunting" after a 73-year-old retired teacher was beaten up by teenagers and died of his injuries. Oscar Dros said there was a risk more people could die and he appealed for justice to be left to the authorities. The man from the eastern city of Arnhem was lured into having sexual contact with a minor while in a gay chatroom. Authorities said he was aware the boy was underage. But there was no evidence of past…
Internationalpedophile, pedophile hunters6 Comments


text:
Items tagged with Take-Two
by Nathan Ord - Sun, Sep 18, 2022
GTA 6 Gameplay Videos Allegedly Leaked Online For Download
It seems Rockstar games isn't the cybersecurity rockstar it may have thought, as Grand Theft Auto 6 videos, source code, and Rockstar in-house documents are leaking online. In an interesting twist of fate, this might be coming from the recent Uber threat actor, who will likely have a laundry list of criminal charges should the United States Read more...
by Lane Babuder - Sat, Aug 27, 2022
Why Rockstar Is Banning Anyone From Talking About GTA 6 On Twitch
In February, Rockstar confirmed that development of Grand Theft Auto VI is well underway. In July, the TakeTwo subsidiary publicized that it would no longer work on Red Dead Redemption 2 or its online offering to focus on the development of the next title in the mega-popular GTA series. Despite this, talking about the... Read more...
by Nathan Ord - Thu, Aug 05, 2021
GTA 6 And A Return To Miami Allegedly Teased In Red Dead Redemption 2
For quite some time, there have been several leaks regarding the eventual Grand Theft Auto 6, including an alleged return to Vice City. Up until now, these leaks have been generally unfounded, but a new teaser discovered in Red Dead Redemption 2 may give credence to what we have heard about GTA 6. Earlier this... Read more...
by Nathan Ord - Mon, Jun 14, 2021
Take-Two's E3 2021 Panel Starts Soon But Should We Expect GTA 6?
Later this afternoon, video game company Take-Two will be hosting an interactive panel during E3, the multi-day video game industry event. Though they are the parent company of Rockstar Games and 2K Games, which could have several games to announce, this is not quite what we are expecting today. Starting at 10:15 AM... Read more...
by Paul Lilly - Tue, Mar 09, 2021
Out Of Touch Take-Two CEO Suggests Gamers Will Tolerate $70 Video Game Price Tags
This may come as a surprise to some of you, but if you play video games, you are apparently ready to pay a higher price for titles than what you have been. So says Straus Zelnick, the chief executive officer of Take-Take Interactive, who tripled down on the controversial notion during the Morgan Stanley Technology... Read more...
by Nathan Ord - Tue, Nov 10, 2020
Take-Two Acquiring 'Project Cars' Publisher Codemasters For $1 Billion
Take-Two Interactive has reached an agreement to purchase UK-based publisher Codemasters. With an implied equity value at approximately $994M, the deal will bring the racing game publisher into Take-Two's portfolio for more projected profits in the coming years. Codemasters publishes the F1, Dirt, and Project Cars... Read more...
by Shane McGlaun - Wed, Jun 03, 2020
Take-Two Poached Kerbal Space Program 2 Dev Team, Then Cancelled Contract With Studio
Take-Two pulled off a questionable move on an independent game developer called Star Theory Games. The independent developer had been contracted by Take-Two to build a game called Kerbal Space Program 2. Last December, employees of Star Theory received a recruitment message via LinkedIn on a Friday night that dropped... Read more...
by Brandon Hill - Mon, Jun 01, 2020
Take-Two CEO Says Google Overpromised With Stadia Game Streaming
We've had quite a bit of time to assess Google's Stadia streaming platform, especially after the free tier for the service first launched nearly two months ago (you can read the HotHardware review here). Stadia brings the promise of "up to" 4K/60 game streaming with HDR and 5.1 surround sound supports on laptops, TVs... Read more...
by Shane McGlaun - Wed, May 27, 2020
GTA 6 Launch Windows Possibly Outed By Take-Two SEC Filing, Here's What We Know
Video game publisher Take-Two has one of the biggest video game franchises on the market thanks to Grand Theft Auto. The latest game in the franchise is GTA V, which is still incredibly popular despite having launched way back in 2013. Recently, Take-Two filed a 10-K with the SEC that shows what the company plans to... Read more...
by Paul Lilly - Mon, Feb 11, 2019
GTA Online Cheat Creator Ordered To Pay $150,000 In Damages To Take-Two
It is not uncommon for developers and publishers to crack down on cheating through in-game mechanisms, suspensions, and even bans, but Take-Two Interactive is taking a different tack in some of the more extreme cases. The publisher is hitting makers of cheat software with lawsuits, and is seeing some success. The... Read more...
by Shane McGlaun - Wed, Feb 06, 2019
Take-Two Ships Over 23 Million Copies Of Red Dead Redemption 2
Take-Two has been basking in the glowing press and tremendous sales performance of Red Dead Redemption 2. The game was so well received right out of the gates that it made $725 million in its first three days of availability. Take-Two is the parent company to Rockstar, the developers behind the game. Take-Two has... Read more...
by Brittany Goetting - Tue, Jan 15, 2019
Pinkertons Threaten Rockstar With Legal Action Over Portrayal In Red Dead Redemption 2
Red Dead Redemption 2 is widely regarded as a fairly accurate representation of the southwestern United States in the late nineteenth century. However, one group is not pleased with Rockstar's depiction of the wild wild west. The Pinkerton Incorporation is suing Rockstar Games and its parent company, Take-Two. The... Read more...
News, Gaming
by Brittany Goetting - Sat, Jun 24, 2017
Much Respect: Rockstar Games Asks Take-Two To Step Off GTA V PC Modders And OpenIV
It is better to have some mods instead of none, right? In a welcome move, Rockstar Games and Grand Theft Auto publisher Take-Two Interactive have agreed to not take legal action against single-player mod projects. Rockstar released a statement noting, "Take-Two has agreed that it generally will not take legal... Read more...
GTA V Is Pummeled With Negative Reviews On Steam In Protest To OpenIV Shutdown Decision
As we reported last week, Take-Two sent a cease-and-desist letter to the developers of the OpenIV modding tool for Grand Theft Auto, claiming that the software was guilty of "allow[ing] third parties to defeat security features of its software and modify that software in violation Take-Two's rights". As a result... Read more...
by Rob Williams - Fri, Jun 16, 2017
Take-Two Crushes OpenIV GTA Modding Tool With Legal Ban Hammer
Take-Two clearly doesn't look at the modding scene with the same love as many of its peers. The Grand Theft Auto series has had a rich modding community for years, with its creative fans adding an incredible amount of content to Rockstar's most important series. Sometimes, even new mechanics are added. While most... Read more...
by Brandon Hill - Tue, Oct 18, 2016
Rockstar Confirms Red Dead Redemption 2, Targets Fall 2017 Release
After publishing two teasers over the weekend that had obvious nods to a sequel in the Red Dead franchise, Rockstar Games today confirmed the development of Red Dead Redemption 2. According to the developer, Red Dead Redemption 2 is on target for a Fall 2017 release, but given its past track record, we should... Read more...
by Brandon Hill - Mon, Oct 17, 2016
Rockstar Teases New Red Dead Game, But Investors Are Already Seeing Green
It's been six years since Red Dead Redemption first hit store shelves, and gamers have been clamoring for a sequel to the hit shooter ever since. Rockstar Games has kept mostly silent about the next installment in the franchise, which began with Red Dead Revolver's uneventful release in 2004 — that is until this past... Read more...
by Sean Knight - Tue, Sep 02, 2014
Activision Could Be No-Scoping For A Take-Two Takedown
When it comes to lucrative game franchises two of the most well-known ones happen to be Call of Duty and Grand Theft Auto. Activision publishes the CoD franchise while Take-Two Interactive is responsible for publishing GTA. However, there are rumors floating around that Activision might be trying to purchase Take-Two. Speculation began when... Read more...
by Rob Williams - Fri, Jul 04, 2014
2K Games Announces October Release For Civilization: Beyond Earth Along With In-Game Footage
Since Firaxis took the veil off of Civilization: Beyond Earth in April, we've had a relative dearth of information to run on, and especially a lack of media to soak in (three official screenshots!). Well, both problems have now been remedied, and as an added bonus, the company has finally given us a release date:... Read more...
Take-Two Interactive Buys Back Carl Ichan's Shares and Part Ways
Take-Two Interactive Software, Inc. is forging ahead without further guidance or input from billionaire investor Carl Icahn, who agreed to sell back his 12.02 million shares in the company at yesterday's closing price of $16.93 per share. That works out to around $203.5 million, which Take-Two will fund from its cash... Read more...
Grand Theft Auto V Sales Zoom Past $1 Billion in Just Three Days
For one reason or another, it's fair to say that the majority of people in real life would never cross the moral lines that Rockstar Games presents in Grand Theft Auto V. Some would (and do), but by and large, we're not all running around jacking cars, robbing jewelery stores, trafficking drugs and weapons, beating up... Read more...
by Shawn Oliver - Mon, May 18, 2009
Take-Two Sues Duke Nukem Forever Developer
Seriously folks, we couldn't make this stuff up if we tried. In fact, this is the stuff that pure comedic gold is made of. Duke Nukem Forever, which is arguably the most highly hyped game to never emerge in official fashion, was thought to extinguished forever when 3D Realms (its developer) went under earlier this month. Weeks later, the game... Read more...


text:
Indian Nobel Prize Winner
Nobel laureate of India from 1913 to 2014.
Indian Nobel Prize Winners List | (UPSC, SSC, IAS, IPS,…
List of Indian Nobel laureates
Nobel Prize : list of nobel prize winner in india in hindi
NOBEL PRIZE WINNER FROM INDIA , FROM 1913 TO 2014 |CIVIL…
Nobel prize winner of India or Nobel laureates of India
Tricks to recall indian nobel prize winner and indian…
154th birth anniversary of Indian Nobel Laureate Gurudev…
Indian Nobel Laureates || Indian Citizens
nobel prize winners in science


Recent Adventures of Pooh Bear and Little Bug!
Great photos. Wouldn't we all love to have that curly hair?!
what's he digging in the background?
They are so so precious. I bet they keep you busy! I'm kinda glad my older 2 grands are older now even though I miss them being small. They are a big help to me with Abby when I watch them during the summer. Well, when they aren't fussing that is ha. It's much easier to just go stay at their home because they are at the "I'm bored" stage and there they have all of their things to help with that boredom. They don't like it in the country like Abby does.
I wish I had half of their energy. I could get so much done. They are just so cute Bonnie!!!
They're so cute! Bust buddies for life. You're blessed :) Hope you had a great day!
What a cute post! They are just like my own kids :)Lovely shots.
Your GRANDsons always bring a smile to my face!
Great Photos of your grandchildren, I also have 3 grandchildren and they are just wonderful. glad to be young enough to enjoy them.
Awe they are so cute and they look like they are having a great time.
Cuteness overload! They are so adorable on the lawn tractor. Little Bit gets up every day and says hello to Hubs lawn tractor. He can see it from his bedroom window. Boys and their tractors, lol!
Look at all those curls! Those boys look like such good kids. Well behaved, happy and gentle with animals. Someone is raising them just right.


early 14c., "person who holds lands by title or by lease," from Anglo-French tenaunt (late 13c.), Old French tenant (12c.), noun use of present participle of tenir "to hold," from Latin tenere "hold, keep" (see tenet).
The last I heard of him, he was the tenant of a western penitentiary.
She was betrothed to a good young man, too: a tenant of his.
From something in your last, I would wish to explain my idea of being your tenant.
I have no foolish notion of being a tenant on easier terms than another.
No tenant could be found for the place, which was avoided as if the plague still clung to it.
Coupeau told his friends he'd pay them something later, out of the rent from his tenant.
Madame Leonce refused to allow the women to go up to her tenant's room.
I'd get a bit of land somewhere, though I couldn't be a tenant on Ballycloran.
The left-hand apartment on this floor had as its tenant a Miss Norman.
Needless to say Jed Winslow did no speculating concerning his tenant's "past."


text:
Actors' Equity and Broadway League reach tentative contract agreement
On Dec. 1, Actors' Equity Association and The Broadway League announced that the two entities have come to a tentative agreement on the new production contract which governs Broadway and sit-down productions across the country.
Negotiations between the two parties, which began in September, led to this new, three-year collective bargaining agreement. The agreement now remains subject to ratification by Equity members in a vote by electronic ballot.
According to a spokesperson for Equity, ratification requires a simple majority of votes to be cast in favor of the new contract. Only Equity members who have worked the production contract on Broadway or in a sit-down production during the last two contract cycles (which goes back to 2015) are eligible to vote. Eligible members will receive voting instructions via email. Dates for the voting period have yet to be announced.
The Broadway League does not have a ratification process, according to a League spokesperson.
Broadway News is following this developing story.
Actors' Equity launches pilot program to continue video principal auditions


text:
Call of Duty: Modern Warfare's Season One gets extension
A lot of content is coming between now and the end of the season, including some XP boosts to get us going.
Sam Bishop
Infinity Ward and Activision's Call of Duty: Modern Warfare has been popular since its release in October of 2019, and now those enjoying the ongoing Season One content can spend even longer having fun with it.
This is because the developer has announced that the season will now end on February 11, meaning new items and challenges will arrive, like a challenge to earn the new Crossbow weapon, remixed game modes, fresh playlists, and more in the Store.
Infinity Ward says this is a "one-time extension", and we'll have 2XP, 2X Weapon XP, and 2X Tier Progression during this time as well.
Despite the game only being out a few months, Infinity Ward still has big plans, including more 6v6 maps that players have been requesting.
Are you pleased the season has been extended?
You watching
REVIEW. Written by Andreas Juul on the 25th of October 2019 at 02
"Does this make for a paradigm shift for first-person shooters? No, but it's nothing short of spectacular nonetheless."
NEWS. Written by Sam Bishop on the 16th of January 2020 at 11:05
3v3 gunfight mode is coming to Modern Warfare
NEWS. Written by Alicia Chang on the 13th of January 2020 at 09:27
Some other features are in the works as well as Infinity Ward continues to support last year's Call of Duty.
The Call of Duty League structure has been detailed
ESPORTS. Written by Sam Bishop on the 10th of January 2020 at 09
Points will be earned in the regular season and Home Series weekends, determining who gets to the playoffs.
Nicky Romero headlining London Royal Ravens CoD event
The Call of Duty League Home Series will be seeing the DJ host a concert and play in Hype Battles too.
Modern Warfare Gunfight tournaments are coming back
ESPORTS. Written by Sam Bishop on the 9th of January 2020 at 07
Those wanting to get competitive in the 2v2 mode can do so, since it's on Infinity Ward's radar.
Call of Duty is PS Store's most-downloaded December game
NEWS. Written by Sam Bishop on the 8th of January 2020 at 09:31
Modern Warfare is still popular, and both Star Wars and The Witcher are also popular considering the film and TV series.
You must be logged in to comment. If you are not yet a member - join now!
Would you like to post this action to Facebook ?
System: PC, PS4, Xbox One
Developer: Infinity Ward
Offline players: 1
Age limit: From 18 years
Read entire review »
Loading next content
EUROPE'S LARGEST VIDEO GAME MAGAZINE
Staff presentation
Advertise on GR


text:
Lily Allen reveals she used to 'sleep for days' to avoid eating but confesses she's now 'in a really good place'
Katie BaillieTuesday 12 Jun 2018 9:35 am
Lily Allen has revealed her battle with her body image (Picture: Steve Meddle/REX/Shutterstock)
Lily Allen has opened up about her battle with her body image during her 20s.
The singer, who's known for being outspoken and honest, revealed to Lorraine Kelly how she used to have a shockingly unhealthy relationship with food, and confessed she used to use sleep as a way to avoid eating in a bid to stay skinny.
'I used to sleep for days so that I didn't eat,' she said. 'My relationship with my body wasn't great in my 20s.'
She added that it was the pressure to appear perfect while also remaining defiant that made her behave in such a way.
Sorry, this video isn't available any more.
'I presented myself in a defiant way. I didn't want to care, but it felt people came down on me three times as hard.'
Lily also addressed the fact that on the new album, No Shame, she talks about feeling like she has been a bad mother.
Lily Allen confessed to feeling like a bad mum too (Picture: Ken McKay/ITV/REX/Shutterstock)
'On my last album my kids were really small when I was touring with Sheezus and I was spending long periods away from them, it was a rock and roll lifestyle,' she said. 'And as fun as that life is, when you're waking up in the middle of no where and missed five Facetimes from your little ones it's hard.'
She went on to confess: 'But I did have a lot of fun.'
When asked if any of her outlandish antics will need explaining to her kids, she said: 'There are questionable outfits, Twitter spats, but I've written a book that lays it all bear. And this album does too, so when they hit their teens and think I'm embarrassing I'll say "listen to this!".
Lily is not a stranger to criticism, whether it's from her kids or from social media, and she confessed she deals with it by taking it all on board.
'I find ways to take the criticisms. Sometimes it's not unfounded and there are things I do do wrong,' she said. 'I think it's about listening and taking things on board, separating the nonsense.
'I feel in a really good place.'
No Shame is out now.
MORE : Lily Allen reveals diva-like demands at height of her 'bratty popstar behaviour'
MORE : Lily Allen takes to gay bar in tinsel after claiming she 'hasn't been falling out of nightclubs' and is in £1million debt
DealsLily AllenSocial Media
Peter Andre's wife Dr Emily MacDonagh on puberty, parenting and being too shy for showbiz


While many doubted Apple could make a serious entry into the mobile phone market, it seems iPhone sales are doing very well. Today, the Cupertino-based company announced it has sold its one millionth iPhone, ahead of its own predictions to surpass the million mark by September 30.
The announcement follows a recent report by research firm iSuppli which indicated the iPhone accounted for 1.8 percent of all smart phone sales in the US in July. Furthermore, Apple stopped production of its 4GB iPhone and slashed $200 off the price of the 8GB model, looking to boost sales of the iPhone during the upcoming holiday sales season. Apple has said it is targeting 10 million iPhones sold by the end of 2008.


When you need to react quickly, nothing beats a computer's reflexes... A Tesla driver found that out when his car automatically avoided a head-on collision with another car on a rainy night in Seattle (rainy and Seattle go together so well in a sentence...). As you can see in the dash-cam video below, this took place on Highway 99 north of the city, and while the Tesla was going about 45 miles per hour, what looks like a black sedan (could be dark green or blue, hard to tell) makes a right turn right in front of the car.
The driver described the scene: "Was travelling a little under 45 mph. There was some rain, but roads were pretty dry. I was watching stopped traffic to my right. I did not touch the brake. Car did all the work. Sadly no audio, because I had an Uber passenger and Washington has strict privacy laws about recording conversations."
Nice to see that the system does work most of the time, even if malfunctions happens, right?
The video was posted to Reddit and there's further discussion of it in the comments here.
I disagree [that I should have been driving slower]. This was on Highway 99 north of Seattle. I set it a couple mph below the speed limit of 45. Traffic tends to move around 55. It's easy to say that in hindsigh, I should be going slower, but traffic tends not to pull out from you in that direction. I was actually watching cars to the right of me, which is the entire reason the car reacted and I didn't. All the fault is in the other driver, and the video clearly shows this. With your reasoning, even going 25 in a 45 is too fast, because someone could pull right in front of me.
Also, I had the car set to follow cars at the maximum distance, which has ironically is about 2 to 3 vehicles in front (It's based on speed).
He also mentions that the car alerted him to the problem with audio, which isn't available in the video.
Coast-to-coast in 57 hours with Tesla's Autopilot taking the wheel!