text:
Michel Wedel
Michel Wedel was named a Distinguished University Professor in July 2015. He holds the PepsiCo Chair in Consumer Science at the Robert H. Smith School of Business at the University of Maryland. His main research interest is in Consumer Science: the application of statistical and econometric methods to further the understanding of consumer behavior and to improve marketing decision making. Much of his recent work has measured the effectiveness of visual marketing using eye-tracking technology. He teaches models for Marketing decision making for MBA students, advanced Marketing analytics for MS students, and Bayesian statistics for Ph.D. students.
View my directory page
The Trends That Will Shape Marketing in 2021
SMITH BRAIN TRUST – Business and marketing in 2021 will be affected by trends in new technology, consumers' concern over climate change, equity, diversity, and income inequality, and the pandemic and its economic and psychological aftermath.
Read more about The Trends That Will Shape Marketing in 2021
What Went Wrong for Quibi?
SMITH BRAIN TRUST – It seemed like Quibi had it made. Founded by Hollywood mogul Jeffrey Katzenberg, and helmed by former Hewlett Packard CEO Meg Whitman, the short-form mobile-friendly video streaming service was well funded and had a lineup of A-list stars and producers. What could go wrong?
Plenty, it seems like.
Read more about What Went Wrong for Quibi?
Wedel Receives 2020 Don Lehmann Award
Maryland Smith's Michel Wedel is the winner of the 2020 Don Lehmann Award, which honors the best dissertation-based article to appear in the Journal of Marketing or Journal of Marketing Research. It's the latest accolade for the marketing professor and eye-tracking expert.
Read more about Wedel Receives 2020 Don Lehmann Award
Maryland Smith to Offer Free Business Education Program for Maryland Residents, Businesses
To help Marylanders get back into the workforce and prepare for the new economic and business environment, The University of Maryland's Robert H. Smith School of Business has developed an online business program — free to all residents of the state of Maryland.
Read more about Maryland Smith to Offer Free Business Education Program for Maryland Residents, Businesses
SMITH BRAIN TRUST – The coronavirus pandemic may have thrown many of your summer plans into disarray, but there's one much-loved activity you can still pursue: Losing yourself in a stack of engrossing books.
Maryland Smith's faculty are there for you, with suggestions to get you through the summer break.
Read more about Summer Reading List 2020
Maryland Smith's Wedel To Receive Top Marketing Award
Michel Wedel, renowned marketing professor and eye-tracking expert at the University of Maryland's Robert H. Smith School of Business, is a recipient of the 20th Paul D. Converse Award.
Read more about Maryland Smith's Wedel To Receive Top Marketing Award
Maryland Smith's Wedel Wins Global Research Award
Maryland Smith marketing professor Michel Wedel has won the American Marketing Association's 2019 Robert J. Lavidge Global Marketing Research Award.
Read more about Maryland Smith's Wedel Wins Global Research Award
Netherlands University Honors Maryland Smith's Michel Wedel
The University of Groningen in the Netherlands has awarded Maryland Smith marketing professor Michel Wedel the 2019 Ubbo Emmius Medal for science merits.
Read more about Netherlands University Honors Maryland Smith's Michel Wedel
INFORMS Honors Maryland Smith Professor Michel Wedel
Michel Wedel, the PepsiCo Professor of Consumer Science at the University of Maryland's Robert H. Smith School of Business, has won the 2019 Buck Weaver Award from the INFORMS Society for Marketing Science.
Read more about INFORMS Honors Maryland Smith Professor Michel Wedel
Maryland Smith Claims Second Spot On Premier AMA Journals List
The 2018 Marketing Research Productivity Lists, which track top individual and institutional contributors to the premier journals, show that the University of Maryland jumped to the second spot on the premier AMA journals list. Maryland also entered the top five institutions on the premier journals list. It is the first public university to be in the top five since 2015 and the first U.S.-based public university since 2013.
Read more about Maryland Smith Claims Second Spot On Premier AMA Journals List

redpajama_set_name: RedPajamaCommonCrawl


text:
'''
This module contains the distributed learning approach we employ
on tribeflow. Through the use of MPI, parallelization can be performed
on multiple machines.
'''
from __future__ import division, print_function

from _learn import _aggregate
from _learn import em
from _learn import fast_populate

from collections import OrderedDict

from enum import Enum

from learn import prepare_results

from mpi4py import MPI

from tribeflow import dataio
from tribeflow import kernels
from tribeflow.mycollections.stamp_lists import StampLists

import cProfile
import numpy as np
import time

Msg = Enum('Msg', ['STARTED', 'FINISHED', 'PAIRME', 'PAIRED', \
        'LEARN', 'SENDRESULTS', 'STOP'])
MASTER = 0
CACHE_SIZE = 1

def paired_update(comm, previous_encounters_s, Count_sz_local, Count_sz_pair, \
        Count_sz_others, P_local, P_pair):

    rank = comm.rank
    comm.isend(rank, dest=MASTER, tag=Msg.PAIRME.value)
    pair_id = comm.recv(source=MASTER, tag=Msg.PAIRED.value)

    if pair_id == rank: #Paired with self, do nothing
        return False

    elif pair_id < rank:
        comm.Recv([Count_sz_pair, MPI.INT], source=pair_id)
        comm.Recv([P_pair, MPI.DOUBLE], source=pair_id)

        comm.Send([Count_sz_local, MPI.INT], dest=pair_id)
        comm.Send([P_local, MPI.DOUBLE], dest=pair_id)
    else:
        comm.Send([Count_sz_local, MPI.INT], dest=pair_id)
        comm.Send([P_local, MPI.DOUBLE], dest=pair_id)

        comm.Recv([Count_sz_pair, MPI.INT], source=pair_id)
        comm.Recv([P_pair, MPI.DOUBLE], source=pair_id)

    #Update Counts
    #[:] is to avoid copies of arrays. Make sure we dont lose anything
    N_til_s = previous_encounters_s[pair_id]
    Count_sz_others[:] = Count_sz_others + Count_sz_pair - N_til_s

    N_til_s[:] = Count_sz_pair
    P_local[:] = (P_local + P_pair) / 2.0

    return True

def receive_workload(comm):
    sizes = np.zeros(6, dtype='i')
    comm.Recv([sizes, MPI.INT], source=MASTER)

    num_lines = sizes[0]
    nz = sizes[1]
    nh = sizes[2]
    ns = sizes[3]
    n_residency_priors = sizes[4]
    mem_size = sizes[5]

    Count_zh = np.zeros(shape=(nz, nh), dtype='i4')
    Count_sz = np.zeros(shape=(ns, nz), dtype='i4')
    count_h = np.zeros(shape=(nh, ), dtype='i4')
    count_z = np.zeros(shape=(nz, ), dtype='i4')

    Dts = np.zeros(shape=(num_lines, mem_size), dtype='f8')
    Trace = np.zeros(shape=(num_lines, 2 + (mem_size + 1)), dtype='i4')

    comm.Recv([Dts, MPI.DOUBLE], source=MASTER)
    comm.Recv([Trace, MPI.INT], source=MASTER)
    priors = np.zeros(2 + n_residency_priors, dtype='f8')
    comm.Recv([priors, MPI.DOUBLE], source=MASTER)

    alpha_zh = priors[0]
    beta_zs = priors[1]
    residency_priors = priors[2:]
    kernel_class = comm.recv(source=MASTER)
    P = np.zeros(shape=(nz, n_residency_priors), dtype='f8')
    comm.Recv([P, MPI.DOUBLE], source=MASTER)

    kernel = kernel_class()
    kernel.build(Trace.shape[0], Count_zh.shape[0], residency_priors)
    if n_residency_priors > 0:
        kernel.update_state(P)

    return Dts, Trace, Count_zh, Count_sz, \
            count_h, count_z, alpha_zh, beta_zs, kernel

def sample(Dts, Trace, Count_zh, Count_sz_local, \
        count_h, count_z, alpha_zh, beta_zs, kernel, num_iter, comm):

    previous_encounters_s = {}
    for other_processor in xrange(1, comm.size):
        previous_encounters_s[other_processor] = np.zeros_like(Count_sz_local)

    stamps = StampLists(Count_zh.shape[0])
    for z in xrange(Count_zh.shape[0]):
        idx = Trace[:, -1] == z
        #dts_assigned = Dts[idx:, 0].ravel().copy()
        #np.sort(dts_assigned)
        stamps._extend(z, Dts[idx][:, -1])

    aux = np.zeros(Count_zh.shape[0], dtype='f8')

    Count_sz_pair = np.zeros_like(Count_sz_local)
    Count_sz_others = np.zeros_like(Count_sz_local)
    Count_sz_sum = np.zeros_like(Count_sz_local)

    Theta_zh = np.zeros_like(Count_zh, dtype='f8')
    Psi_sz = np.zeros_like(Count_sz_local, dtype='f8')

    can_pair = True
    for i in xrange(num_iter // CACHE_SIZE):
        #Sample from the local counts and encountered counts
        Count_sz_sum[:] = Count_sz_local + Count_sz_others
        count_z[:] = Count_sz_sum.sum(axis=0)

        em(Dts, Trace, stamps, Count_zh, Count_sz_sum, \
                count_h, count_z, alpha_zh, beta_zs, aux, Theta_zh, \
                Psi_sz, CACHE_SIZE, CACHE_SIZE * 2, kernel, False)

        #Update local counts
        Count_sz_local[:] = Count_sz_sum - Count_sz_others
        count_z[:] = Count_sz_local.sum(axis=0)

        #Update expected belief of other processors
        if can_pair:
            P_local = kernel.get_state()
            can_pair = paired_update(comm, previous_encounters_s, \
                    Count_sz_local, Count_sz_pair, Count_sz_others, \
                    P_local, np.zeros_like(P_local))
            kernel.update_state(P_local)

def work():
    comm = MPI.COMM_WORLD
    rank = comm.rank

    #pr = cProfile.Profile()
    #pr.enable()

    while True:
        status = MPI.Status()
        msg = comm.recv(source=MASTER, tag=MPI.ANY_TAG, status=status)
        event = status.Get_tag()

        if event == Msg.LEARN.value:
            comm.isend(rank, dest=MASTER, tag=Msg.STARTED.value)

            num_iter = msg

            Dts, Trace, Count_zh, Count_sz, count_h, count_z, \
                    alpha_zh, beta_zs, kernel = receive_workload(comm)
            fast_populate(Trace, Count_zh, Count_sz, count_h, \
                    count_z)
            sample(Dts, Trace, Count_zh, Count_sz, count_h, \
                    count_z, alpha_zh, beta_zs, kernel, num_iter, \
                    comm)

            comm.isend(rank, dest=MASTER, tag=Msg.FINISHED.value)
        elif event == Msg.SENDRESULTS.value:
            comm.Send([np.array(Trace[:, -1], order='C'), MPI.INT], dest=MASTER)
            comm.Send([Count_zh, MPI.INT], dest=MASTER)
            comm.Send([Count_sz, MPI.INT], dest=MASTER)
            comm.Send([count_h, MPI.INT], dest=MASTER)
            comm.Send([count_z, MPI.INT], dest=MASTER)
            comm.Send([kernel.get_state(), MPI.DOUBLE], dest=MASTER)
        elif event == Msg.STOP.value:
            break
        else:
            print('Unknown message received', msg, event, Msg(event))

    #pr.disable()
    #pr.dump_stats('worker-%d.pstats' % rank)

def fetch_results(comm, num_workers, workloads, Dts, Trace, \
        previous_stamps, Count_zh, Count_sz, count_h, count_z, \
        alpha_zh, beta_zs, Theta_zh, Psi_sz, kernel):

    Count_zh[:] = 0
    Count_zh_buff = np.zeros_like(Count_zh)

    Count_sz[:] = 0
    Count_sz_buff = np.zeros_like(Count_sz)

    count_h[:] = 0
    count_h_buff = np.zeros_like(count_h)

    count_z[:] = 0
    count_z_buff = np.zeros_like(count_z)

    P = kernel.get_state()
    P[:] = 0
    P_buff = np.zeros_like(P)

    for worker_id in xrange(1, num_workers + 1):
        comm.isend(worker_id, dest=worker_id, tag=Msg.SENDRESULTS.value)

        idx = workloads[worker_id - 1]
        assign = np.zeros(Trace[idx].shape[0], dtype='i')
        comm.Recv([assign, MPI.INT], source=worker_id)
        Trace[:, -1][idx] = assign

        comm.Recv([Count_zh_buff, MPI.INT], source=worker_id)
        Count_zh += Count_zh_buff

        comm.Recv([Count_sz_buff, MPI.INT], source=worker_id)
        Count_sz += Count_sz_buff

        comm.Recv([count_h_buff, MPI.INT], source=worker_id)
        count_h += count_h_buff

        comm.Recv([count_z_buff, MPI.INT], source=worker_id)
        count_z += count_z_buff

        comm.Recv([P_buff, MPI.DOUBLE], source=worker_id)
        P += P_buff

    P[:] = P / num_workers
    kernel.update_state(P)
    Theta_zh[:] = 0
    Psi_sz[:] = 0

    _aggregate(Count_zh, Count_sz, count_h, count_z, \
        alpha_zh, beta_zs, Theta_zh, Psi_sz)

    Theta_zh[:] = Theta_zh / Theta_zh.sum(axis=0)
    Psi_sz[:] = Psi_sz / Psi_sz.sum(axis=0)

    for z in xrange(Count_zh.shape[0]):
        previous_stamps._clear_one(z)
        #dts_assigned = Dts[Trace[:, -1] == z].ravel().copy()
        #np.sort(dts_assigned)
        previous_stamps._extend(z, Dts[Trace[:, -1] == z][:, -1])

def manage(comm, num_workers):
    available_to_pair = -1
    finished = {}
    num_finished = 0

    for worker_id in xrange(1, num_workers + 1):
        finished[worker_id] = False

    while num_finished != num_workers:
        status = MPI.Status()
        worker_id = comm.recv(source=MPI.ANY_SOURCE, tag=MPI.ANY_TAG, \
                status=status)
        event = status.Get_tag()

        if event == Msg.STARTED.value:
            print('Worker', worker_id, 'is working!')

        elif event == Msg.PAIRME.value:
            if num_finished == num_workers - 1: #only 1 working, pair with self
                comm.isend(worker_id, dest=worker_id, tag=Msg.PAIRED.value)
            else:
                assert available_to_pair != worker_id
                if available_to_pair == -1:
                    available_to_pair = worker_id
                else:
                    comm.isend(available_to_pair, dest=worker_id, \
                            tag=Msg.PAIRED.value)
                    comm.isend(worker_id, dest=available_to_pair, \
                            tag=Msg.PAIRED.value)
                    available_to_pair = -1
        elif event == Msg.FINISHED.value:
            print('Worker', worker_id, 'has finished it\'s iterations!')
            finished[worker_id] = True
            num_finished += 1

            #wake up last worker if it's waiting for a pair
            if num_finished == num_workers - 1 and available_to_pair != -1:
                comm.isend(available_to_pair, dest=available_to_pair, \
                        tag=Msg.PAIRED.value)
        else:
            print(0, 'Unknown message received', worker_id, event, Msg(event))

def dispatch_jobs(Dts, Trace, Count_zh, Count_sz, count_h, \
        count_z, alpha_zh, beta_zs, kernel, residency_priors, \
        workloads, num_workers, comm):

    for worker_id in xrange(1, num_workers + 1):
        idx = workloads[worker_id - 1]

        sizes = np.zeros(6, dtype='i')
        sizes[0] = Trace[idx].shape[0]
        sizes[1] = Count_zh.shape[0]
        sizes[2] = Count_zh.shape[1]
        sizes[3] = Count_sz.shape[0]
        sizes[4] = residency_priors.shape[0]
        sizes[5] = Dts.shape[1]

        comm.Send([sizes, MPI.INT], dest=worker_id)
        comm.Send([Dts[idx], MPI.INT], dest=worker_id)
        comm.Send([Trace[idx], MPI.INT], dest=worker_id)

        priors = np.zeros(2 + residency_priors.shape[0], dtype='f8')
        priors[0] = alpha_zh
        priors[1] = beta_zs
        priors[2:] = residency_priors

        comm.Send([priors, MPI.DOUBLE], dest=worker_id)
        comm.send(kernel.__class__, dest=worker_id)
        comm.Send([kernel.get_state(), MPI.DOUBLE], dest=worker_id)

def generate_workload(nh, num_workers, Trace):
    hyperids = np.arange(nh)
    np.random.shuffle(hyperids)

    hyper2worker = {}
    for i in xrange(nh):
        worker = i % num_workers
        hyper2worker[hyperids[i]] = worker

    workloads = np.zeros(shape=(num_workers, Trace.shape[0]), dtype='bool')
    for i in xrange(Trace.shape[0]):
        h = Trace[i, 0]
        worker = hyper2worker[h]
        workloads[worker, i] = True

    assert workloads.sum() == Trace.shape[0]
    return workloads

def fit(trace_fpath, num_topics, alpha_zh, beta_zs, kernel, residency_priors, \
        num_iter, from_=0, to=np.inf):
    '''
    Learns the latent topics from a temporal hypergraph trace. Here we do a
    asynchronous learning of the topics similar to AD-LDA. An even number of
    threads is required.

    Parameters
    ----------
    trace_fpath : str
        The path of the trace. Each line should be a
                (timestamp, hypernode, source, destination) where the
                timestamp is a long (seconds or milliseconds from epoch).

    num_topics : int
        The number of latent spaces to learn

    alpha_zh : float
        The value of the alpha_zh hyperparameter

    beta_zs : float
        The value of the beta_zs (beta) hyperaparameter

    kernel : Kernel object
        The kernel to use

    residency_priors : array of float
        The kernel hyper parameters

    num_iter : int
        The number of iterations to learn the model from

    Returns
    -------

    A dictionary with the results.
    '''
    comm = MPI.COMM_WORLD
    num_workers = comm.size - 1

    Dts, Trace, previous_stamps, Count_zh, Count_sz, \
            count_h, count_z, prob_topics_aux, Theta_zh, Psi_sz, \
            hyper2id, source2id = \
            dataio.initialize_trace(trace_fpath, num_topics, num_iter, \
            from_, to)
    for worker_id in xrange(1, num_workers + 1):
        comm.send(num_iter, dest=worker_id, tag=Msg.LEARN.value)

    workloads = generate_workload(Count_zh.shape[1], num_workers, Trace)
    dispatch_jobs(Dts, Trace, Count_zh, Count_sz, count_h, \
            count_z, alpha_zh, beta_zs, kernel, residency_priors, \
            workloads, num_workers, comm)
    manage(comm, num_workers)
    fetch_results(comm, num_workers, workloads, Dts, Trace, previous_stamps, \
            Count_zh, Count_sz, count_h, count_z, alpha_zh, \
            beta_zs, Theta_zh, Psi_sz, kernel)

    for worker_id in xrange(1, num_workers + 1):
        comm.send(worker_id, dest=worker_id, tag=Msg.STOP.value)

    rv = prepare_results(trace_fpath, num_topics, alpha_zh, beta_zs, \
            kernel, residency_priors, num_iter, -1, Dts, \
            Trace, Count_zh, Count_sz, count_h, \
            count_z, prob_topics_aux, Theta_zh, Psi_sz, hyper2id, \
            source2id, from_, to)

    rv['num_workers'] = np.asarray([num_workers])
    rv['algorithm'] = np.asarray(['parallel gibbs + em'])
    return rv

redpajama_set_name: RedPajamaGithub


text:
Tributes to Blackburn fitness fanatic, 30, who died in his sleep
Jonny described his best friend as a "true gentleman" and is raising money to support Sam's daughters
Dominic Moffitt
A fitness enthusiast has died in his sleep leaving behind his two young daughters.
Sam Marrow, from Blackburn, was fit and well when his best friend Jonny Smith, 29, called him for a chat on Thursday (March 26).
He died unexpectedly in his sleep that night.
The 30-year-old, who worked as a groundsman, went to the gym six or seven times a week and was completely dedicated to a healthy lifestyle.
His death leaves his two young daughters without a dad and Jonny without his best friend.
"He loved the gym and he was dedicated to it and his kids," Jonny told LancsLive.
"It's so heartbreaking to see him leave us and his children behind when was so young.
"He was one of the fittest guys you would ever meet, he was a fitness freak. He was in there six or seven times a week and people would always be asking him for advice about working out.
"It just goes to show that it doesn't matter how fit you are sometimes."
When Jonny first heard that his friend had died he was distraught.
Having only spoken to Sam hours before, the 29-year-old couldn't get his head around the news that his friend had passed.
Jonny said: "My cousin rang me to tell me and I thought he was lying, I couldn't believe it.
"My aunt had to break the news to me but I think I had a gut feeling that it might be true. It completely broke me.
"I just couldn't fully comprehend it."
Jonny and Sam first met when they were 14-years-old at school.
The two hit it off immediately and became close friends.
Jonny said that over the next 16 years the pair would come to consider one another family.
He said: "Me and Sam have been best friends since we were kids, we did everything together.
"He was a true gentleman. We spent most Christmases together, we were like family.
"In fact he was family to me and my family, every Christmas, no matter what, we would spend time together."
Sharp rise in confirmed coronavirus cases in Blackburn with Darwen
Blackburn Rovers' financial impact on Nottingham Forest's after Ben Brereton transfer
Sam and Jonny were there when they both had children.
Jonny plays a huge role in the lives of Sam's children, 10-year-old Megan and 11-year-old Amy-Leigh, and says he wants to take care of them now that their father is gone.
"His kids call me uncle Jonny, I've seen them grow up," said Jonny.
"I need to see them being looked after, for my own piece of mind as much as their well-being.
"I hope that I can do what I can for those two girls."
Both Amy-Leigh and Megan have told Jonny that, when they grow up, they want to open in gym in their father's name.
It's a dream that Jonny wants to help the two girls achieve.
100 new books you can read in Covid-19 lockdown, from fantasy to romance
Tarleton company "puts workers at risk" with office creche during pandemic
He said: "They keep going on about the gym to me.
"I just want to bring a smile to their faces, Sam was such a good person and he was a huge part of the girls' life.
"He helped the kid out a lot but what daddy can't give them now I hope I can."
Jonny is currently raising money to support Megan and Amy-Leigh and is hoping some money can later be used to build the girl's dream gym.


The Maya civilization flourished in Guatemala and surrounding regions during the first millennium A.D. After almost three centuries as a Spanish colony, Guatemala won its independence in 1821. During the second half of the 20th century, it experienced a variety of military and civilian governments as well as a 36-year guerrilla war. In 1996, the government signed a peace agreement formally ending the conflict, which had led to the death of more than 100,000 people and had created some 1 million refugees.


text:
Jacqui's Story Jacqui's Story
Jacqui and her assistance dog Duke enjoy long walks together, thanks to her Extreme X8 Powerchair, from All Terrain Wheelchairs
Shortly after getting engaged 10 years ago, Jacqui Gawn from Hook was diagnosed with MS. Unlike some people living with MS, Jacqui's condition deteriorated quite quickly due to a number of relapses and she soon found herself requiring the use of a scooter.
It had always been the intention of Jacqui and her husband David to get a dog but they felt this would be unfair on the dog as they were unsure how her condition would affect her ability to take it for walks. However, 2 years ago, they contacted the organisation Dogs for Good to enquire about he possibility of Jacqui being accepted for an assistance dog and to their delight they were given the go ahead as Jacqui explains......
"When we were approved for the scheme we were over the moon. I have always been an outdoor type of person and was determined that just because I had MS I would still enjoy an active outdoor lifestyle. The only problem was every scooter I tried was fine on paths and concrete but as soon as I ventured off road I would get stuck despite being told the scooter would be OK. This meant David had all the fun of going for long walks with Duke while I was left watching from a distance"
All this changed when Jacqui discovered All Terrain Wheelchairs. "When I saw the videos online I knew I had found the answer and immediately got in touch with Cheryl at All Terrain Wheelchairs who arranged for Mark to visit us with a demonstration model. As soon as I sat in the X8 and realised what it could do I said to David 'this is the one for me' and it was the best thing I ever did, it is just awesome!!!"
As with every powerchair from All Terrain Wheelchairs, the width, depth and seat back height on Jacqui's X8 were set up to ensure the chair offered maximum comfort and support. "I use my X8 every day and it is incredibly comfortable which was another factor when deciding to get one. But the main thing was the fact it does what is says – it is goes over all terrain. I am a firm believer that just because I have a disability, there is no reason why I should not be able to enjoy the outdoors as much as I did prior to my diagnosis".
Jacqui, David and Duke will soon be heading to the New Forest for a week's holiday and for the first time since her diagnosis Jacqui is looking forward to going where she wants. "I want to go where a mountain bike would go and I can now, after all you wouldn't take a road bike off road so why would you try and take a scooter off road. I would urge any wheelchair or powerchair user that wants to explore the beautiful countryside we have here in the UK to contact Cheryl and the team at All Terrain Wheelchairs. They are fantastic and could not do enough to help"!
The X8 has done much more than just enable Jacqui to take Duke for long muddy walks as her husband David explains: The X8 has had an amazing effect on Jacqui. As her husband and carer, it is fantastic to see how much more confident and independent she has become. When she takes Duke out for a walk I can relax at home safe in the knowledge that I won't be getting a call to say 'I'm stuck again' which used to be a regular occurrence".
The Extreme X8 has a top speed of 10 kph (6.2mph) while the articulated frame technology ensures all four driving wheels remain in contact with the ground as the 14" lower pressure tyres provide the necessary traction to navigate terrain that Jacqui would find impossible in a standard powerchair.


The Nanaimo Amateur Radio Association owns and operates 5 voice repeaters, 2 IRLP nodes and 1 EchoLink nodes in the area. They are all open repeaters.
Our VE7DJA and VA7ITS repeaters are connected the Island Trunking System and are capable of being put on and off the trunk via simple DTMF command. Please visit http://www.islandtrunksystem.org for thorough information on this system.
Power: Multiple 5kW UPS systems fed by a redundant arrangement of diesel generators. Solar power is not a viable option due to the extreme vandalism experienced in the area.


Till now every smartphone user is aware of the fact that they can share their mobile data connection with a laptop or with other devices using Wi-Fi hotspot. If you have a computer on which you want to use mobile data of your smartphone then this can also be done but for this either you will need a Wi-Fi dongle which will cost. Therefore, you either you need to have USB Tethering.
USB tethering is when your device can work as a virtual Ethernet this can be done only on rooted devices but with the help of a third-party application you can use this feature on your smartphone. So, if you are stuck because Wi-Fi hotspot is not working, or your computer is not having Wi-Fi then you should try some of the best Android tethering apps.
These applications Not only helps you to get connected to the computer using USB tethering, Wi-Fi or Bluetooth tethering but some of them also keeps a well-organized record of data consumption so here are the best Android tethering apps for your smartphone.
CWM provides multiple applications for rooted or non-rooted devices. This Android tethering app works perfectly on all the compatible devices. To use this app, you need to enable USB debugging on your device and then you can download it for free from the play store. The application may also require you to install a driver on your computer depending on the version of windows you are using. Once you are connected to internet this app will show you upload and download speed.
This application helps you to create USB tethering connection between your PC and smartphone. The application is comparatively easy to use. It automatically fixes problems like if you do not have debugging on then it will Notify you to turn it on another advantage of this application is that you can set password for tethered connections and can also hide or show usage. Which makes it one of the best Android tethering apps.
FoxFi is the mobile tethering app helps you to connect your smartphone with your Laptop or computer and it even work on most of the carriers. The application is available as free and the full version. Free version stops functioning after limited data. The application clearly shows you the name of connected devices and you can also see maximum and minimum speed for your connections.
As you can understand by the name itself the application is very easy to use, and it makes tethering process easier for you. After download an installation you will see either you want to use tethering for Mac Windows or Linux. Like other application you will need to enable USB debugging before you start to use the application. You can change DNS in this application. The application supports Bluetooth tethering for Linux, Windows and Android device.
Tethering toggler makes it simple for you by allowing you to enable one touch Wi-Fi connect and one touch USB connect from your Android device to another device or to PC or MAC. If we talk about some key features of this application, then one of them is it is completely free to use, and it is having compatibility even with some older phones because it Can work with Android 2.2 and above.
If you are still running an older version of Windows such as windows XP or Windows Vista, then this application will be helpful for you to tether your internet connection on your computer. the best part about this application is that it comes with on screen instructions for the beginners which makes it easier for them to set up a USB connection on Mac, Windows or Linux based devices. It can be used as USB tethering Android to multiple OS.
Another reason to use tethering apps can be your Mobile service provider applies extra charges when they know that you are using your mobile data as a hotspot. This application in our list works differently and can help you to hide your data usage as Wi-Fi. The application provides you on screen instructions to modify some values in the connection settings and when you use internet on computer or a laptop your carrier will only charge for mobile data. It is basically a wireless tethering app.
So, these were the applications you can use to Tether your internet connection on your computer or on your other devices. So, pick one of these best Android tethering apps and get internet working on your devices.


text:
<?php

namespace PHPSemVerCheckerGit\Console\Command;

use Gitter\Client;
use Gitter\Repository;
use PHPSemVerChecker\Analyzer\Analyzer;
use PHPSemVerChecker\Finder\Finder;
use PHPSemVerChecker\Report\Report;
use PHPSemVerChecker\Reporter\Reporter;
use PHPSemVerChecker\SemanticVersioning\Level;
use PHPSemVerCheckerGit\Filter\SourceFilter;
use PHPSemVerCheckerGit\SourceFileProcessor;
use RuntimeException;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use vierbergenlars\SemVer\expression as SemanticExpression;
use vierbergenlars\SemVer\SemVerException as SemanticVersionException;
use vierbergenlars\SemVer\version as SemanticVersion;

class SuggestCommand extends BaseCommand
{
	/**
	 * @return void
	 */
	protected function configure()
	{
		$this->setName('suggest')->setDescription('Compare a semantic versioned tag against a commit and provide a semantic version suggestion')->setDefinition([
			new InputOption('include-before', null, InputOption::VALUE_REQUIRED, 'List of paths to include <info>(comma separated)</info>'),
			new InputOption('include-after', null, InputOption::VALUE_REQUIRED, 'List of paths to include <info>(comma separated)</info>'),
			new InputOption('exclude-before', null, InputOption::VALUE_REQUIRED, 'List of paths to exclude <info>(comma separated)</info>'),
			new InputOption('exclude-after', null, InputOption::VALUE_REQUIRED, 'List of paths to exclude <info>(comma separated)</info>'),
			new InputOption('tag', 't', InputOption::VALUE_REQUIRED, 'A tag to test against (latest by default)'),
			new InputOption('against', 'a', InputOption::VALUE_REQUIRED, 'What to test against the tag (HEAD by default)'),
			new InputOption('allow-detached', 'd', InputOption::VALUE_NONE, 'Allow suggest to start from a detached HEAD'),
			new InputOption('details', null, InputOption::VALUE_NONE, 'Report the changes on which the suggestion is based'),
			new InputOption('config', null, InputOption::VALUE_REQUIRED, 'A configuration file to configure php-semver-checker-git'),
		]);
	}

	/**
	 * @param string $directory
	 * @return \Gitter\Repository
	 */
	private function getRepository($directory)
	{
		$client = new Client();
		return $client->getRepository($directory);
	}

	/**
	 * @param \Symfony\Component\Console\Input\InputInterface   $input
	 * @param \Symfony\Component\Console\Output\OutputInterface $output
	 * @return int
	 */
	protected function execute(InputInterface $input, OutputInterface $output)
	{
		$startTime = microtime(true);

		$targetDirectory = getcwd();
		$against = $this->config->get('against') ?: 'HEAD';

		$repository = $this->getRepository($targetDirectory);

		$tag = $this->getInitialTag($repository);

		if ($tag === null) {
			$output->writeln('<error>No tags to suggest against</error>');
			return 1;
		}

		$output->writeln('<info>Testing ' . $against . ' against tag: ' . $tag . '</info>');

		$sourceFileProcessor = new SourceFileProcessor(
			new SourceFilter(),
			$repository,
			$output,
			new Finder(),
			$targetDirectory,
			$repository->getModifiedFiles($tag, $against)
		);

		$initialBranch = $repository->getCurrentBranch();

		if ( ! $this->config->get('allow-detached') && ! $initialBranch) {
			$output->writeln('<error>You are on a detached HEAD, aborting.</error>');
			$output->writeln('<info>If you still wish to run against a detached HEAD, use --allow-detached.</info>');
			return -1;
		}
		$after = $sourceFileProcessor->processFileList(
			$against,
			$this->config->get('include-after'),
			$this->config->get('exclude-after')
		);
		$before = $sourceFileProcessor->processFileList(
			$tag,
			$this->config->get('include-before'),
			$this->config->get('exclude-before')
		);
		// Reset repository to initial branch
		if ($initialBranch) {
			$repository->checkout($initialBranch);
		}

		$analyzer = new Analyzer();
		$report = $analyzer->analyze($before->getScanner()->getRegistry(), $after->getScanner()->getRegistry());

		$tag = new SemanticVersion($tag);
		$newTag = $this->getNextTag($report, $tag);

		$output->write(
			[
				'',
				'<info>Initial semantic version: ' . $tag . '</info>',
				'<info>Suggested semantic version: ' . $newTag . '</info>',
			],
			true
		);

		if ($this->config->get('details')) {
			$reporter = new Reporter($report);
			$reporter->output($output);
		}

		$duration = microtime(true) - $startTime;
		$output->write(
			[
				'',
				'[Scanned files] Before: ' . $before->getFilteredCount() . ' (' . $before->getUnfilteredCount() . ' unfiltered), After: ' . $after->getFilteredCount() . ' (' . $after->getUnfilteredCount() . '  unfiltered)',
				'Time: ' . round($duration, 3) . ' seconds, Memory: ' . round(memory_get_peak_usage() / 1024 / 1024, 3) . ' MB',
			],
			true
		);
		return 0;
	}

	/**
	 * @param \PHPSemVerChecker\Report\Report $report
	 * @param \vierbergenlars\SemVer\version  $tag
	 * @return \vierbergenlars\SemVer\version
	 */
	private function getNextTag(Report $report, SemanticVersion $tag)
	{
		$newTag = new SemanticVersion($tag);
		$suggestedLevel = $report->getSuggestedLevel();
		if ($suggestedLevel === Level::NONE) {
			return $newTag;
		}
		if ($newTag->getPrerelease()) {
			$newTag->inc('prerelease');
			return $newTag;
		}
		if ($newTag->getMajor() < 1 && $suggestedLevel === Level::MAJOR) {
			$newTag->inc('minor');
			return $newTag;
		}
		$newTag->inc(strtolower(Level::toString($suggestedLevel)));
		return $newTag;
	}

	/**
	 * @param \Gitter\Repository $repository
	 * @return null|string
	 */
	private function getInitialTag(Repository $repository)
	{
		$tag = $this->config->get('tag');
		if ($tag === null) {
			return $this->findLatestTag($repository);
		}
		return $this->findTag($repository, $tag);
	}

	/**
	 * @param \Gitter\Repository $repository
	 * @return string|null
	 */
	protected function findLatestTag(Repository $repository)
	{
		return $this->findTag($repository, '*');
	}

	/**
	 * @param \Gitter\Repository $repository
	 * @param string             $tag
	 * @return string|null
	 */
	protected function findTag(Repository $repository, $tag)
	{
		$tags = (array)$repository->getTags();
		$tags = $this->filterTags($tags);

		$tagExpression = new SemanticExpression($tag);

		try {
			// Throws an exception if it cannot find a matching version
			$satisfyingTag = $tagExpression->maxSatisfying($tags);
		} catch (SemanticVersionException $e) {
			return null;
		}

		return $this->getMappedVersionTag($tags, $satisfyingTag);
	}

	/**
	 * @param array $tags
	 * @return array
	 */
	private function filterTags(array $tags)
	{
		$filteredTags = [];
		foreach ($tags as $tag) {
			try {
				new SemanticVersion($tag);
				$filteredTags[] = $tag;
			} catch (SemanticVersionException $e) {
				// Do nothing
			}
		}
		return $filteredTags;
	}

	/**
	 * @param string[]                                   $tags
	 * @param \vierbergenlars\SemVer\version|string|null $versionTag
	 * @return string|null
	 */
	private function getMappedVersionTag(array $tags, $versionTag)
	{
		foreach ($tags as $tag) {
			try {
				if (SemanticVersion::eq($versionTag, $tag)) {
					return $tag;
				}
			} catch (RuntimeException $e) {
				// Do nothing
			}
		}
		return null;
	}
}


DHAKA – Bangladesh Premier League franchises have enlisted a number of players by contacting them separately.
Many of them were paid fees higher than $70,000, the highest allowed price for a foreign cricketer in the competition.
Barisal had already confirmed the inclusion of West Indies Chris Gayle, said BPL governing council's member secretary Ismail Haider Mallick yesterday.
Gayle also played in Barisal colours in earlier editions of the tournament.
Dhaka Dynamites confirmed the inclusion of Sri Lanka's Kumar Sangakkara while Pakistan allrounder Shahid Afridi was roped in by Sylhet Royals. Afridi had previously played for Dhaka.
Apart from them, Afridi's compatriot allrounder Shoaib Malik will play for Comilla, while Sri Lanka's Tillakaratne Dilshan will play for Chittagong and his countryman Thisara Perera for Rangpur Riders.
Asked why the teams were allowed to draft in cricketers outside 'players-by-choice' transfer system, Mallick said: "We must allow this to raise acceptability of our tournament. Cricketers like Afridi, Gayle, Malik wouldn't want to come over for less than $70,000.
"We have had many discussions to arrive at the decision. We are compelled to take in four-five cricketers with over $70,000 in the interest of the tournament," he said.
Mallick went on to explain why the franchises were given the chance with payments above the stated amount.
"Look, if these cricketers were in our list, they would not get more than $70,000. But when all six of the franchises would contact individually, the price would naturally go up.
Mallick, who is a BCB director, made it clear that the board would not take any responsibility for the additional sum of the payment.
"If the teams draft cricketers directly, we will not be responsible for fees above $70,000.
The forms would state that the board would not take responsibility for any payment above the scale of $70,000, Mallick added.
Despite that, however, the contracts have to be submitted to the board.
Mallick also claimed that drafting some players by exceeding the 'fixed' amount would not raise the expenditure of the teams.
Curtains will go up on the third edition of the BPL on November 20. The final will be played on December 15.


text:
Government Politics
Ex-UK Prime Minister, Cameron, Reveals Why Jonathan Prevented Them From Rescuing Chibok Girls
October 5, 2019 Admin 181 Views 0 Comments
A former Prime Minister of the United Kingdom, David Cameron, has revealed why former President of Nigeria, Goodluck Jonathan, prevented them from rescuing the girls abducted from a secondary school in Chibok, Borno State, by Boko Haram terrorists in April 2014.
According to Cameron, Jonathan prevented British forces from engaging in rescue efforts as he seemed to see the entire incident as cheap politics.
In his recently published memoir, 'For the Record', Cameron, who was in office at the time of the abduction, said British troops traced the location of some of the victims and offered to help but Jonathan refused, according to TheCable.
Cameron wrote, "In early 2014, a group of fighters entered Government Secondary School in the village of Chibok, seizing 276 teenage girls.
"They were taken to camps deep in the forest. The Christians among them were forced to convert to Islam. Many were sold as slaves, entering the same endless violent nightmare the Yazidi women suffered.
"As 'Bring Back Our Girls' campaign spread across the world, we embedded a team of military and intelligence experts in Nigeria, and sent spy planes and tornadoes with thermal imaging to search for the missing girls. And, amazingly, from the skies above a forest three times the size of Wales, we managed to locate some of them.
"But Nigeria's President, Goodluck Jonathan, seemed to be asleep at the wheel. When he eventually made a statement, it was to accuse the campaigners of politicising the tragedy. And absolutely crucially, when we offered to help rescue the girls we had located, he refused."
Jonathan's spokesman, Ikechukwu Eze, could not be reached for comment on Saturday.
However, the former President had said in an interview on BBC last year that he could not be held responsible for the abduction of the Chibok girls.
Jonathan said rather, Boko Haram should be blamed for the abduction of the girls because as a President he could not go to the battlefield to fight insurgents.
He said, "I cannot take responsibility for the abduction, I don't control Boko Haram. They are criminals.
"But as a President, of course you know it is not the President that goes to the field. You have security and intelligence officers that do the work.
"Let me admit that yes, maybe they did their best but their best was not good enough for us to recover the girls.
"That I cannot say I am right or I am wrong. That does not mean I am trying to remove myself from any blame."
← How One America News sells an altered reality to voters who dream of wealth
These chocolate chip cookies are inspired by the hit film "Ghostbusters" →
Russia's oil companies ready to cut output until July – TASS
W. Africa Crude-Buyers wait for Nigerian diffs to drop, Angolan trades briskly
COVID-19 And Ogoniland Clean-up By Cyril Abaku
Man Shot Dead In Robbery Attack In Kumasi
A thirty-six-year-old man has been shot dead in a daylight robbery attack at Atonsu in the Asokwa Municipality of the
Afro-Pop singer EFE releases the video translation to his love number
Christmas flavour low over election brawl – Traders
Photos of Female Footballer, Asisat Oshoala Kneeling at Public Event
Kuupole Foundation donates to Saint Theresa's Hospital in Nandom
Man United to back Solskjaer in January
December 4, 2020 Admin No Comments
16 million people get stroke annually — Health Stakeholders
Young people 'feel anxiety and terror' using fitness apps
July 29, 2020 Admin No Comments
Ghanaians Are Not Ready For Any Bankrupt Leadership—Edmund Kyei Reminds Mahama
Akwa Ibom tasks contractors on quality job delivery
Niger Tornadoes defender dies in traffic accident
May 15, 2018 Admin No Comments


He is a dedicated champion for raising up successful young leaders, and committed to challenging and helping men be great dads.
Paul is one of the world's leading experts on men's issues, character maturity and personal life expansion. He is a double outlier having invested over 20,000 hours in the pursuit of masculine excellence. His exploits have taken him from the inside of firefights in Middle Eastern wars to perilous revolutions in the deep jungles of central Nicaragua. He helped Willie Nelson launch the highly successful charity FarmAid, helped launch the most successful AIDS program in African history and tirelessly gives his life and his family to help others. His professional accolades range from Emmy awards to Addy awards to numerous charity and civic awards.