text:
What is bone cancer (sarcoma)?
By Dr. Ananya Mandal, MDReviewed by April Cashin-Garbutt, MA (Editor)
Bone cancer may be of two basic types:
Primary bone cancer - cancer that begins in the bone
Secondary bone cancer - cancer that begins elsewhere in the body (for example lungs, breast, liver etc.) that has spread to the bone
Primary bone cancer is a rare form of cancer - about 500 cases are diagnosed in the UK each year (only about one in every 500 cancers).
Around 2,600 people in United States of America are diagnosed with primary or secondary bone cancer each year. Bone cancers make for 2% of all cancers in the USA.
How does bone cancer begin?
The cancer usually begins with bone pain that usually gets worse over time and may wake the affected person from sleep. There may be bone fractures on relatively less severe impact or trauma and swelling and tenderness over the affected area as well.
Joint movement may be difficult if the joints are affected. In addition, there may be weakness, weight loss, fever and other general symptoms. 1-6
Causes and risk factors
The exact causes of bone cancer are unknown. Risk factors include exposure to radiation in the past, having Paget's disease of the bone that affects the growth cycle of the bone cells.
Only around 1% of persons with Paget's disease may develop bone cancer. There is no evidence that an injury to the bone causes cancer. There may be a link to rare genetic conditions such as Li-Fraumeni syndrome.
Types of Primary bone cancer
Bone is made up of cells that grow and collagen fibres (tough, elastic fibres) as well as minerals like Calcium that give it the hardness. There are two main types of cells within the hard bone tissue that mould the bone. These cells are Osteoblasts and Osteoclasts.
Osteoblasts form the bone by laying down bone material. Osteoclasts dissolve the particles of bone and cause resorption. These cells are active throughout life and work in tandem balance to keep the bone constantly growing and dissolving. There is a slow but constant turnover of bone.
Cancer Research eBook
Another type of cell is chondrocytes which make cartilage. These make the hard tissues that cover the ends of bones in joints. In the centre of some larger bones is the soft bone marrow that is the place where blood cells are manufactured.
Although bone cancers are rare, there are four major types of bone cancer of primary origin. These include osteosarcoma, Ewing's sarcoma, spindle cell sarcoma and chondrosarcoma.
This is the commonest type of primary bone cancer. In the United Kingdom, around 150 new cases are diagnosed each year.
The cancer is seen commonly in children and young adults between ages of 5 and 20. Among young people osteosarcoma is the third most common cancer after leukaemia and brain tumours.
Osteosarcoma affects larger bones, such as the thigh bone (femur) or the shin bone (tibia).
Around 100 new cases of this cancer are detected in the UK each year. Ewing's sarcoma also affects children and young people aged between 10 and 20.
Ewing's sarcoma also affects larger bones like pelvis, thigh bone or shin bone.
Spindle cell sarcoma
Around 80 new cases of this cancer are diagnosed in UK each year. This cancer is similar to osteosarcoma and is diagnosed in adults aged 40 or over.
Chondrosarcoma
This cancer is diagnosed in 80 individuals in UK each year. This is the cancer of middle ages and is diagnosed in people aged between 40 and 50.
Commonly affected sites include pelvis, thigh bone, upper arm bone, shoulder blade (scapula) and the ribs.
Management of bone cancers
Bone cancer treatment includes therapy with medication or chemotherapy to reduce the size of the tumor and then follow up with surgery to remove the affected area of bone. Earlier bone cancer surgery involved removal of the limb altogether (amputation).
These days the affected part of the bone may be removed and replaced with metal implants. This is called limb-sparing surgery.
Bone cancer that is detected early and is confined to the bone is relatively easier to treat with a better outlook. On the other hand cancer that has spread to the bone marrow or to other organs like lungs, liver etc. is difficult to treat and chances of survival are relatively low.
www.nhs.uk/conditions/Cancer-of-the-bone/Pages/Introduction.aspx
www.royalmarsden.nhs.uk/.../osteosarcoma.aspx
www.bbc.co.uk/.../typescancer_bone.shtml
http://www.ncbi.nlm.nih.gov/pubmedhealth/PMH0002616/
http://www.patient.co.uk/health/Cancer-of-the-Bone-(Primary).htm
www.mdanderson.org/.../index.html
All Bone Cancer Content
Causes and symptoms of bone cancer
Types of bone cancer
Diagnosis of bone cancer
Treatment of bone cancer
Dr. Ananya Mandal
Dr. Ananya Mandal is a doctor by profession, lecturer by vocation and a medical writer by passion. She specialized in Clinical Pharmacology after her bachelor's (MBBS). For her, health communication is not just writing complicated reviews for professionals but making medical knowledge understandable and available to the general public as well.
Mandal, Ananya. (2019, April 18). What is bone cancer (sarcoma)?. News-Medical. Retrieved on February 02, 2023 from https://www.news-medical.net/health/What-is-bone-cancer-(sarcoma).aspx.
Mandal, Ananya. "What is bone cancer (sarcoma)?". News-Medical. 02 February 2023. <https://www.news-medical.net/health/What-is-bone-cancer-(sarcoma).aspx>.
Mandal, Ananya. "What is bone cancer (sarcoma)?". News-Medical. https://www.news-medical.net/health/What-is-bone-cancer-(sarcoma).aspx. (accessed February 02, 2023).
Mandal, Ananya. 2019. What is bone cancer (sarcoma)?. News-Medical, viewed 02 February 2023, https://www.news-medical.net/health/What-is-bone-cancer-(sarcoma).aspx.
Johnny Santos on What is bone cancer (sarcoma)?
Johnny Santos says:
é genético o cancer de ossos


text:
Obwodnica Lublina – droga ekspresowa przebiegająca na zachód, północ i wschód od Lublina. Budowa jej północnej i wschodniej części była planowana od 2005, miała miejsce w latach 2011–2014 i odbywała się w ramach budowy drogi ekspresowej S12/S17. Zachodnia część obwodnicy planowana od 1998, została wybudowana w latach 2014–2016 jako fragment drogi ekspresowej S19. Istnieją koncepcje budowy odcinka południowego, o klasie niższej niż droga ekspresowa.

Głównym zadaniem obwodnicy Lublina jest wyprowadzenie ruchu tranzytowego z centrum miasta, który w 2014 oceniano na 20% ruchu miejskiego, w tym na 50% ruchu wjazdowego od strony Warszawy. Ma ona stworzyć lepsze warunki do rozwoju inwestycji, komunikacji miejskiej i ruchu rowerowego. Jest jedną z trzech obwodnic na terenie Lublina, obok śródmiejskiej i miejskiej.

Przebieg

Informacje ogólne

Obwodnica Lublina stanowi odcinek trzech dróg ekspresowych:
 kierunek północ – południe: droga ekspresowa S19 – Kuźnica – Białystok – Lublin – Rzeszów – Barwinek;
 kierunek północny zachód – południowy wschód: droga ekspresowa S17 – (Warszawa) – Zakręt – Lublin – Zamość – Hrebenne – (Lwów);
 kierunek zachód – wschód: droga ekspresowa S12 – Piotrków Trybunalski – Radom – Lublin – Chełm – Dorohusk.

Obwodnicę Lublina budowano w dwóch etapach: w pierwszej kolejności część północno-wschodnią (stanowiącą wspólny odcinek dróg S17 i S19), następnie część zachodnią (stanowiącej odcinek drogi S19). Trasa części północno-wschodniej rozpoczyna się na węźle "Lublin Sławinek" i kończy na węźle "Lublin Felin". Trasa części zachodniej wiedzie od węzła "Lublin Sławinek" do węzła "Lublin Węglin".

Odcinek północny ("Lublin Sławinek" – "Lublin Rudnik")
Węzeł "Lublin Sławinek" w Dąbrowicy to bezkolizyjne skrzyżowanie wielopoziomowe, od którego odchodzą: w kierunku wschodnim odcinek obwodnicy Lublina w ciągu dróg S12, S17 i S19; w kierunku południowo-zachodnim odcinek obwodnicy w ciągu drogi S19 (w budowie); w kierunku południowo-wschodnim wlot do Lublina od strony Warszawy (aleją "Solidarności").

Trasa odcinka do  węzła "Lublin Rudnik" w Elizówce przebiega na północ od granic Lublina, w relacji zachód-wschód. Tym fragmentem przebiegają jednym śladem trzy drogi ekspresowe: S12, S17 oraz S19. Na tym odcinku powstał węzeł "Lublin Czechów", na którym znajduje się wlot do Lublina (drogą wojewódzką nr 809, ul. Bohaterów Września, Poligonowa). Węzeł "Lublin Rudnik" powstał na przecięciu obwodnicy z drogą krajową nr 19 i drogą wojewódzką nr 835, która stanowi wlot do Lublina od strony Białegostoku (al. Spółdzielczości Pracy). Długość tego odcinka to 10,2 km.

Odcinek wschodni ("Lublin Rudnik" – "Lublin Felin")
Odcinek do węzła "Lublin Felin" w Świdniku. Od węzła "Lublin Rudnik" obwodnica biegnie w kierunku południowo-wschodnim poprzez estakadę nad doliną Bystrzycy do węzła "Lublin Tatary", gdzie znajduje się wlot do Lublina (drogą krajową nr 82, ul. Turystyczna). Następnie biegnie w kierunku południowym (na wschód od miasta) przez węzeł "Lublin Zadębie" (na którym łączy się z drogą wojewódzką nr 822 – ul. Metalurgiczną i dojazdem do Portu Lotniczego Lublin) do węzła "Lublin Felin", gdzie łączy się z odcinkiem S12/S17 Lublin – Piaski. Długość tego odcinka obwodnicy to 12,8 km.

Odcinek zachodni ("Lublin Sławinek" – "Lublin Węglin")
Odcinek od węzła "Lublin Sławinek" w Dąbrowicy do węzła "Lublin Węglin" w ciągu drogi ekspresowej nr S19. Fragment ten jest zlokalizowany na zachód od granic miasta. Powstał na nim węzeł "Lublin Szerokie", na którym znajduje się wlot do Lublina (drogą wojewódzką nr 830, ul. Nałęczowską). Węzeł "Lublin Węglin" łączy drogę krajową nr 19 w kierunku Rzeszowa oraz drogę wojewódzką nr 747 i nowy wlot do Lublina drogą wojewódzką nr 809 (al. Kraśnicka). Długość tego odcinka obwodnicy to 9,8 km.

Od lat 90. mieszkańcy pobliskich miejscowości przedstawiali wiele wątpliwości co do przebiegu tego odcinka. Był więc on realizowany w drugiej kolejności. 29 października 2014 podpisano umowę na budowę zachodniej obwodnicy Lublina, odcinka o długości 9,8 km.

Koncepcja obwodnicy południowej
W 2005 Edward Partyka, autor przebiegu niektórych odcinków obwodnicy, zwrócił uwagę, że na skutek domknięcia obwodnicy miejskiej oraz w związku z urbanizacją południowej części Lublina znacznie wzrośnie ruch w rejonie wlotu od strony al. Kraśnickiej. Ponadto – jego zdaniem – brakuje dogodnego połączenia dla komunikacji między drogami S19 i S12/17 oraz drogami wojewódzkimi nr 747 i 835, które nie biegłoby ulicami miejskimi. W publikacji z roku 2013 wraz z Jerzym Kaliszukiem i Radosławem Palonką wskazał, że południowa obwodnica Lublina zastąpiłaby planowany zachodni odcinek Trasy Zielonej i skróciłaby dojazd do portu lotniczego Lublin.

Inżynierowie przedstawili dwa warianty przebiegu obwodnicy południowej: na północ (wariant bardziej korzystny) lub na południe od Zalewu Zemborzyckiego i Dąbrowy. Według pierwszego wariantu południowa obwodnica łączyłaby węzły "Lublin Węglin" i "Lublin Felin", biegła wzdłuż granicy miasta na południe od Starego Gaju, dalej w rejonie ul. Żeglarskiej i przedłużenia ul. Grygowej. Wariant drugi zakłada budowę nowych węzłów na drogach ekspresowych: na S19 w rejonie Strzeszkowic i na S12/S17 w Świdniku. Obwodnica południowa biegłaby trasą dwujezdniową o klasie G lub wyższej.

Koncepcja uwzględniająca pierwszy wariant przebiegu (o długości 15–18 km) i klasę drogi G pojawiła się w 2016 w trakcie opracowywania SUiKZP Lublina. Ogłoszono, że droga ta nie miałaby służyć ruchowi tranzytowemu, lecz lokalnemu. Byłaby także przedłużeniem drogi wojewódzkiej nr 747. Klasa G umożliwiałaby zbudowanie chodników, dróg rowerowych i jednopoziomowych skrzyżowań z okolicznymi drogami. Inwestycja miałaby zostać sfinansowana z funduszy unijnych na lata 2021–2027. W tym czasie GDDKiA w Lublinie stwierdziła, że plan domknięcia obwodnicy Lublina nie znajduje się w jej planach, ponieważ taka droga nie wyprowadzałaby ruchu tranzytowego z Lublina.

Infrastruktura
Obwodnicę Lublina zbudowano jako drogę ekspresową klasy S, do której dostęp jest możliwy wyłącznie poprzez węzły drogowe (bezkolizyjne skrzyżowania dwupoziomowe). Zapewnią one powiązania dróg niższych kategorii, zbierających ruch z terenów przyległych do drogi ekspresowej, a drogi dojazdowe obsługujące ruch lokalny, w powiązaniu z drogami istniejącymi wcześniej oraz nowymi przejazdami (pod lub nad obwodnicą), tworzą nowy układ komunikacyjny. Ruch lokalny na obwodnicy porusza się po drogach serwisowych, a rolnicy co kilkaset metrów mają do dyspozycji tunele, którymi mogą dojechać do pól.

Obwodnica ma dwie jezdnie po dwa lub trzy pasy ruchu, rozdzielone pasem zieleni. Na całym przebiegu pozostaje rezerwa ziemi, aby można było dołożyć po jednym pasie ruchu w każdym kierunku. Każdy pas ma 3,5 metra szerokości, kierowcy mają także do dyspozycji pas awaryjny szerokości 2,5 metra. Między jezdniami jest 4–5-metrowy pas rozdzielający, w tym opaski bezpieczeństwa.

Zwierzęta mogą przechodzić pod drogą przepustami. W pobliżu węzła "Lublin Węglin" wybudowano nadziemne przejście dla dzikich zwierząt przypominające las, będące pierwszą tego typu konstrukcją na Lubelszczyźnie.

Wykonanie inwestycji

Odcinki północny i wschodni
Budowa drogi ekspresowej S17, stanowiącej część północno-wschodnią obwodnicy, była ujęta w Programie Budowy Dróg Krajowych na lata 2008–2012, w Programie Operacyjnym Infrastruktura i Środowisko na lata 2007–2013 i w Programie Budowy Dróg Krajowych na lata 2011–2015. W skład inwestycji weszły również budowa odcinka Kurów-Zachód (koło Kurowa) – Lublin oraz przebudowa odcinka Lublin – Piaski do standardu drogi ekspresowej, która łączy się z ekspresową obwodnicą Piask. Realizacja projektu ruszyła w 2011. Na całość inwestycji przeznaczono ok. 3 mld złotych z funduszy Unii Europejskiej, a udział własny polskiego rządu to ok. 450 mln zł.

11 października 2011 GDDKiA wybrała ofertę na budowę tego odcinka drogi S17. Odcinek "Lublin Rudnik" – "Lublin Felin" miał zostać zrealizowany za 629 mln zł, a odcinek "Lublin Sławinek" i "Lublin Rudnik" – za 474 mln zł. Prace na północno-wschodnim odcinku obwodnicy Lublina miały trwać do 2013. Oddano go do użytku w 2014.

Północno-wschodni odcinek obwodnicy odciążył o 20–30% ruch miejski, głównie na al. Tysiąclecia, tzw. trasie W-Z. Jest to korzystna zmiana także z perspektywy konserwacji zabytków na wzgórzu zamkowym. Przejazd tym odcinkiem trwa ok. 11 minut.

Odcinek zachodni
Zachodnia część obwodnicy ma dłuższą historię. Wykonanie pierwszych planów zlecono w 1998. Opublikowano je w 2001, następnie do 2012 toczył się proces administracyjnosądowy, zapoczątkowany przez mieszkańców niezadowolonych z proponowanego przebiegu obwodnicy. Rozpatrywano siedem wariantów trasy.

Po usunięciu przeszkód prawnych budowę tego odcinka drogi ekspresowej S19 ujęto w Programie Budowy Dróg Krajowych w ramach perspektywy finansowej Unii Europejskiej 2014–2020. Wartość inwestycji wyniosła ok. 620 mln złotych. 29 października 2014 GDDKiA w Lublinie wybrała ofertę na budowę. Prace budowlane rozpoczęto pod koniec 2014. Odcinek oddano do użytku w 2016 roku.

W 2015 oceniano, że po wybudowaniu tego odcinka znacznie zmniejszy się natężenie ruchu w Lublinie. Czas potrzebny na przejazd od strony Rzeszowa w stronę Białegostoku zostanie skrócony z godziny do ok. 10 minut.

Nazwy robocze węzłów
W fazie projektowania drogi nadano węzłom nazwy robocze, zmienione w lutym 2013:
 węzeł "Lublin Węglin" nosił nazwę roboczą "Konopnica",
 węzeł "Lublin Szerokie" nosił nazwę roboczą "Płouszowice",
 węzeł "Lublin Sławinek" nosił nazwę roboczą "Dąbrowica",
 węzeł "Lublin Czechów" nosił nazwę roboczą "Jakubowice",
 węzeł "Lublin Rudnik" nosił nazwę roboczą "Lubartów",
 węzeł "Lublin Tatary" nosił nazwę roboczą "Włodawa",
 węzeł "Lublin Zadębie" nosił nazwę roboczą "Mełgiewska",
 węzeł "Lublin Felin" nosił nazwę roboczą "Witosa".

Przypisy

Obwodnice Lublina
Ulice w Lublinie

redpajama_set_name: RedPajamaWikipedia


text:
Q: Polly CircuitBreaker change HttpClient baseaddress while circuit broken to continue execution of requests WHAT DO I HAVE NOW?
Currently, I have a client configured with a RetryAsync policy that uses a primary address and on failure switches to a failover address. The connection details are read from a secrets manager.
services
    .AddHttpClient ("MyClient", client => client.BaseAddress = PlaceholderUri)
    .ConfigureHttpMessageHandlerBuilder (builder => {

        // loads settings from secret manager
        var settings = configLoader.LoadSettings().Result;

        builder.PrimaryHandler = new HttpClientHandler {
            Credentials = new NetworkCredential (settings.Username, settings.Password),
            AutomaticDecompression = DecompressionMethods.GZip
        };

        var primaryBaseAddress = new Uri (settings.Host);
        var failoverBaseAddress = new Uri (settings.DrHost);

        builder.AdditionalHandlers.Add (new PolicyHttpMessageHandler (requestMessage => {
            var relativeAddress = PlaceholderUri.MakeRelativeUri (requestMessage.RequestUri);
            requestMessage.RequestUri = new Uri (primaryBaseAddress, relativeAddress);

            return HttpPolicyExtensions.HandleTransientHttpError ()
                .RetryAsync ((result, retryCount) =>
                    requestMessage.RequestUri = new Uri (failoverBaseAddress, relativeAddress));
        }));
    });

WHAT AM I TRYING TO ACHIEVE?
In general
My client can use a primary or failover service. When the primary is down, use failover till the primary is back up. When both are down, we get alerted and can change the service addresses dynamically via secrets manager.
In code
Now I would like to introduce also a CircuitBreakerPolicy and chain those 2 policies together. I am looking for a configuration that is encapsulated and faults are handled on the client level and not on the class consuming that client.
Scenario explained
Let's assume that there is a circuit breaker policy wrapped in a retry policy with a single client.
The circuit breaker is configured to break the circuit for 60 seconds after 3 failed attempts on transient errors on the primary base address. OnBreak - the address changes from primary to failover.
The retry policy is configured to handle BrokenCircuitException, and retry once with the address changed from primary to failover to continue.

*

*Request on primary address - 500 code

*Request on primary address - 500 code

*Request on primary address - 500 code (3 consecutive failures reached)

*Circuit broken for 60 seconds

*Request on primary address - BrokenCircuitException caught by retry policy, call failover

*Request on primary address - BrokenCircuitException caught by retry policy, call failover

*Request on primary address - BrokenCircuitException caught by retry policy, call failover

*Request on primary address - BrokenCircuitException caught by retry policy, call failover

*(after 60 secs) Circuit half-open - (here can be broken for another 60 secs or is open - assume open)

*Request on primary address - 200 code

As described in this articles, there is a solution to this using a breaker wrapped in a fallback, but as you can see there, the logic for default and fallback are implemented in class and not on client level.
I would like
public class OpenExchangeRatesClient
{
    private readonly HttpClient _client;
    private readonly Policy _policy;
    public OpenExchangeRatesClient(string apiUrl)
    {
        _client = new HttpClient
        {
            BaseAddress = new Uri(apiUrl),
        };

        var circuitBreaker = Policy
            .Handle<Exception>()
            .CircuitBreakerAsync(
                exceptionsAllowedBeforeBreaking: 2,
                durationOfBreak: TimeSpan.FromMinutes(1)
            );

        _policy = Policy
            .Handle<Exception>()
            .FallbackAsync(() => GetFallbackRates())
            .Wrap(circuitBreaker);
    }

    public Task<ExchangeRates> GetLatestRates()
    {
        return _policy
            .ExecuteAsync(() => CallRatesApi());
    }

    public Task<ExchangeRates> CallRatesApi()
    {
        //call the API, parse the results
    }

    public Task<ExchangeRates> GetFallbackRates()
    {
        // load the rates from the embedded file and parse them
    }
}

to be rewritten as
public class OpenExchangeRatesClient
{
    private readonly HttpClient _client;
    public OpenExchangeRatesClient (IHttpClientFactory clientFactory) {
        _client = clientFactory.CreateClient ("MyClient");
    }

    public Task<ExchangeRates> GetLatestRates () {
        return _client.GetAsync ("/rates-gbp-usd");
    }
}

WHAT HAVE I READ?

*

*How CircutBreakerWorks and what is there for

*Policies can be wrapped and there is a recommender order for wrapping

*Microsoft's example of Circuit breaker

*Other example of Circuit breaker

*Fallback Policy
WHAT HAVE I TRIED?
I have tried few different scenarios to chain and combine circuit breaker policy with a retry policy to achieve the desired goal on a client lever in the Startup file. The last state was the below. The policies are wrapped in the order where retry would be able to catch a BrokenCircuitException, but this has not been the case. The Exception is thrown on the consumer class, which is not the desired result. Although RetryPolicy is triggered, the exception on the consumer class is still thrown.
var retryPolicy = GetRetryPolicy();
var circuitBreaker = GetCircuitBreakerPolicy();

var policyWraper = Policy.WrapAsync(retryPolicy, circuitBreaker);

services
    .AddHttpClient("TestClient", client => client.BaseAddress = GetPrimaryUri())
    .AddPolicyHandler(policyWraper);

static IAsyncPolicy<HttpResponseMessage> GetCircuitBreakerPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .CircuitBreakerAsync(
            3,
            TimeSpan.FromSeconds(45),
            OnBreak,
            OnReset,
            OnHalfOpen);
}

static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
    return Policy<HttpResponseMessage>
        .Handle<Exception>()
        .RetryAsync(1, (response, retryCount) =>
        {
            Debug.WriteLine("Retries on broken circuit");
        });
}

I have left out the methods OnBreak, OnReset and OnHalfOpen since they are just printing some messages.
UPDATE: Added Logs from Console.
Circuit broken (after 3 attempts)
Retries on broken
Exception thrown: 'System.AggregateException' in System.Private.CoreLib.dll
Retries on broken circuit
Exception thrown: 'System.AggregateException' in System.Private.CoreLib.dll

'CircuitBreakerPolicy.exe' (CoreCLR: clrhost): Loaded 'C:\Program
Retries on broken circuit
Exception thrown: 'System.AggregateException' in System.Private.CoreLib.dll
UPDATE 2: Added reference URL to the class making use of the client with policies configured
UPDATE 3: The project has been updated so that implementation of WeatherService2.Get works in the desired way: When primary service is unavailable the circuit is broken, falover service is used till circuit is closed. That would be the answer to this question, however I would like to explore a solution, where same outcome is achieved using WeatherService.Get with the appropriate policy and client setup on the Startup.
Reference to class using the client.
Reference to project using the class.
On the above logs can be seen Exception thrown: 'System.AggregateException' in System.Private.CoreLib.dll which thrown by the circuitbreaker - that is not expected since there is retry wrapping the circuit breaker.

A: I've downloaded your project and played with it, so here are my observations:
Blocking vs Non-blocking

*

*Because your code uses blocking async call (.Result) that's why you see  AggregateException
public IEnumerable<WeatherForecast> Get()
{
    HttpResponseMessage response = null;
    try
    {
        response = _client.GetAsync(string.Empty).Result; //AggregateException
    }
    catch (Exception e)
    {
        Debug.WriteLine($"{e.Message}");
    }
    ...
}

*

*In order to unwrap the InnerException of the AggregateException you need to use await
public async Task<IEnumerable<WeatherForecast>> Get()
{
    HttpResponseMessage response = null;
    try
    {
        response = await _client.GetAsync(string.Empty); //BrokenCircuitException
    }
    catch (Exception e)
    {
        Debug.WriteLine($"{e.Message}");
    }
    ...
}

Escalation
Whenever you wrap a policy into another then escalation might happen. That means if the inner can't handle the problem then it will propagate the same problem to the outer, which may or may not be able to handle it. If the outermost is not handling the problem then (most of the time) the original exception will be thrown to the consumer of the resilience strategy (which is a combination of policies).
Here you can find more details about escalation.
Let's review this concept in your case:
var policyWrapper = Policy.WrapAsync(retryPolicy, circuitBreaker);

static IAsyncPolicy<HttpResponseMessage> GetCircuitBreakerPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .CircuitBreakerAsync(3, TimeSpan.FromSeconds(45), ...);
}

static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
    return Policy<HttpResponseMessage>
        .Handle<Exception>()
        .RetryAsync(1, ...);
}

*

*Initial request (1. attempt) is issued against https://httpstat.us/500

*It returns 500 which will increase the consecutive transient failure from 0 to 1

*CB escalates the problem to retry

*Retry is not handling status 500, so retry is not triggered

*httpClient returns a HttpResponseMessage with InternalServerError status code.

Let's modify the retry policy to handle transient http errors as well:
static IAsyncPolicy<HttpResponseMessage> GetCircuitBreakerPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .CircuitBreakerAsync(3, TimeSpan.FromSeconds(45), ...);
}

static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .Or<Exception>()
        .RetryAsync(1, ...);
}

*

*Initial request (1. attempt) is issued against https://httpstat.us/500

*It returns 500 which will increase the consecutive transient failure from 0 to 1

*CB escalates the problem to retry

*Retry is handling status 500, so retry issues another attempt immediately

*1st retry request (2. attempt) is issued against https://httpstat.us/500

*It returns 500 which will increase the consecutive transient failure from 1 to 2

*CB escalates the problem to retry

*Even though Retry is handling status 500 it will not trigger because it reached its retrycount (1)

*httpClient returns a HttpResponseMessage with InternalServerError StatusCode.

Now, let's lower the consecutive failure count from 3 to 1 and handle BrokenCircuitException explicitly:
static IAsyncPolicy<HttpResponseMessage> GetCircuitBreakerPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .CircuitBreakerAsync(1, TimeSpan.FromSeconds(45), ...);
}

static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .Or<BrokenCircuitException>()
        .RetryAsync(1, ...);
}

*

*Initial request (1. attempt) is issued against https://httpstat.us/500

*It returns 500 which will increase the consecutive transient failure from 0 to 1

*Circuit Breaker opens because it reaches the predefined threshold

*CB escalates the problem to retry

*Retry is handling status 500, so retry issues another attempt immediately

*1st retry request (2. attempt) is issued against https://httpstat.us/500

*CB prevents this call because it is broken

*CB throws a BrokenCircuitException

*Even though Retry is handling BrokenCircuitException it will not trigger because it reached its retrycount (1)

*Retry throws the original exception (BrokenCircuitException) so httpClient's GetAsync will throw that one.

Finally let's increase the retryCount from 1 to 2:
static IAsyncPolicy<HttpResponseMessage> GetCircuitBreakerPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .CircuitBreakerAsync(1, TimeSpan.FromSeconds(45), ...);
}

static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .Or<BrokenCircuitException>()
        .RetryAsync(2, ...);
}

*

*Initial request (1. attempt) is issued against https://httpstat.us/500

*It returns 500 which will increase the consecutive transient failure from 0 to 1

*Circuit Breaker opens because it reaches the predefined threshold

*CB escalates the problem to retry

*Retry is handling status 500, so retry issues another attempt immediately

*1st retry request (2. attempt) is issued against https://httpstat.us/500

*CB prevents this call because it is broken

*CB throws a BrokenCircuitException

*Retry is handling BrokenCircuitException and it did not exceed its retryCount so it issues another attempt immediately

*2nd retry request (3. attempt) is issued against https://httpstat.us/500

*CB prevents this call because it is broken

*CB throws a BrokenCircuitException

*Even though Retry is handling BrokenCircuitException it will not trigger because it reached its retrycount (2)

*Retry will throw the original exception (BrokenCircuitException) so httpClient's GetAsync will throw that one.

I hope this exercise helped you to better understand how to create a resilience strategy, where you combine multiple policies by escalating the problem.

A: I've reviewed your alternative solution which has the same design issue as it was discussed in my previous post.
public WeatherService2(IHttpClientFactory clientFactory, IEnumerable<IAsyncPolicy<HttpResponseMessage>> policies)
{
    _primaryClient = clientFactory.CreateClient("PrimaryClient");
    _failoverClient = clientFactory.CreateClient("FailoverClient");
    _circuitBreaker = policies.First(p => p.PolicyKey == "CircuitBreaker");

    _policy = Policy<HttpResponseMessage>
        .Handle<Exception>()
        .FallbackAsync(_ => CallFallbackForecastApi())
        .WrapAsync(_circuitBreaker);
}

public async Task<string> Get()
{
    var response = await _policy.ExecuteAsync(async () => await CallForecastApi());

    if (response.IsSuccessStatusCode)
        return response.StatusCode.ToString();

    response = await CallFallbackForecastApi();
    return response.StatusCode.ToString();
}

Your Fallback policy is never triggered.

*

*HttpClient receives a response with statusCode 500

*CircuitBreaker breaks

*CB propagates the HttpResponseMessage with statusCode 500 to the outer policy

*Fallback does not trigger because it was setup for exceptions Handle<Exception>()

*Policy returns the HttpResponseMessage with statusCode 500

*Your code manually examines the response and then manually calls the fallback.

If you change your policy to this:
_policy = Policy
    .HandleResult<HttpResponseMessage>(response => response != null && !response.IsSuccessStatusCode)
    .Or<Exception>()
    .FallbackAsync(_ => CallFallbackForecastApi())
    .WrapAsync(_circuitBreaker);

then there is no need for manual fallback.

*

*HttpClient receives a response with statusCode 500

*CircuitBreaker breaks

*CB propagates the HttpResponseMessage with statusCode 500 to the outer policy

*Fallback triggers because it was setup for unsuccessful status codes as well

*HttpClient receives a response with statusCode 200

*Policy returns the HttpResponseMessage with statusCode 500

There is one more important thing that you need to understand. The previous code only works because you have registered the HttpClients without the circuitbreaker policy.
That means the CB is not attached to the HttpClient. So, if you change the code like this:
public async Task<HttpResponseMessage> CallForecastApi()
    => await _primaryClient.GetAsync("https://httpstat.us/500/");

public async Task<HttpResponseMessage> CallFallbackForecastApi()
    => await _primaryClient.GetAsync("https://httpstat.us/200/");

then even though the CircuitBreaker will be Open after the first attempt the CallFallbackForecastApi will not throw a BrokenCircuitException.
BUT if you attach the CB to the HttpClient like this:
services
    .AddHttpClient("PrimaryClient", client => client.BaseAddress = PlaceholderUri)
    ...
    .AddPolicyHandler(GetCircuitBreakerPolicy());

and then you simplify the WeatherService2 like this:
private readonly HttpClient _primaryClient;
private readonly IAsyncPolicy<HttpResponseMessage> _policy;

public WeatherService2(IHttpClientFactory clientFactory)
{
    _primaryClient = clientFactory.CreateClient("PrimaryClient");
    _policy = Policy
        .HandleResult<HttpResponseMessage>(response => response != null && !response.IsSuccessStatusCode)
        .Or<Exception>()
        .FallbackAsync(_ => CallFallbackForecastApi());
}

then it will miserably fail with a BrokenCircuitException.

If your WeatherService2 would look like this:
public class WeatherService2 : IWeatherService2
{
    private readonly HttpClient _primaryClient;
    private readonly HttpClient _secondaryClient;
    private readonly IAsyncPolicy<HttpResponseMessage> _policy;
    public WeatherService2(IHttpClientFactory clientFactory)
    {
        _primaryClient = clientFactory.CreateClient("PrimaryClient");
        _secondaryClient = clientFactory.CreateClient("FailoverClient");

        _policy = Policy
            .HandleResult<HttpResponseMessage>(response => response != null && !response.IsSuccessStatusCode)
            .Or<Exception>()
            .FallbackAsync(_ => CallFallbackForecastApi());
    }

    public async Task<string> Get()
    {
        var response = await _policy.ExecuteAsync(async () => await CallForecastApi());
        return response.StatusCode.ToString();
    }

    public async Task<HttpResponseMessage> CallForecastApi()
        => await _primaryClient.GetAsync("https://httpstat.us/500/");

    public async Task<HttpResponseMessage> CallFallbackForecastApi()
        => await _secondaryClient.GetAsync("https://httpstat.us/200/");
}

then it could work fine only if the PrimaryClient and FailoverClient have different circuit breakers.
services
    .AddHttpClient("PrimaryClient", client => client.BaseAddress = PlaceholderUri)
    ...
    .AddPolicyHandler(GetCircuitBreakerPolicy());

services
    .AddHttpClient("FailoverClient", client => client.BaseAddress = PlaceholderUri)
    ...
    .AddPolicyHandler(GetCircuitBreakerPolicy());

if they would share the same Circuit Breaker then the second call would fail again with a BrokenCircuitException.
var cbPolicy = GetCircuitBreakerPolicy();

services
    .AddHttpClient("PrimaryClient", client => client.BaseAddress = PlaceholderUri)
    ...
    .AddPolicyHandler(cbPolicy);

services
    .AddHttpClient("FailoverClient", client => client.BaseAddress = PlaceholderUri)
    ...
    .AddPolicyHandler(cbPolicy);

redpajama_set_name: RedPajamaStackExchange


What materials can Polarex Hygienic PVC Wall Cladding be adhered to?
Polarex Hygienic PVC Wall Cladding Sheets can be adhered directly to a wide range of materials including; plaster, render, plasterboard, existing ceramic tiles and blockwork using our Polarex 2-Part Adhesive. If you are unsure as to whether your existing substrate can be adhered to, then simply contact us on 0800 458 0753.
Where can Polarex Hygienic PVC Wall Cladding be installed?
The Polarex Hygienic PVC Wall sheets can be installed in various areas, both domestic and commercial, including; Kitchens, Bathroom, Wetrooms, etc. If you are unsure as to whether the product can be installed in the area required then chances are it probably can! but it is always best to check with a member of our sales team by calling 0800 458 0753.
Why should I choose Polarex Hygienic PVC Wall Cladding?
All of our Polarex Hygienic PVC Wall Cladding Sheets offer premium quality at cost effective prices. Our products also come with a Class "0" Fire Rating & boast an impressive 10 year product warranty so you can rest assure you're investing in a high quality product that will last for years to come. Our detailed specification sheets specify all materials that are used to comprise our Polarex Hygienic PVC Wall Cladding sheets – unlike other cladding materials available on the market that are comprised of cheap filler material.
How do I cut Polarex Hygienic PVC Wall Cladding Sheets?
We recommend cutting your Hygienic PVC Wall Cladding sheets by using a circular saw, or jigsaw with a sharp blade. As the product is a semi-rigid material, the cutting is simple and requires minimal effort.
Are the Polarex Hygienic PVC Wall Cladding Sheets suitable for hot environments to where fire may be a risk?
Yes they are, due to the fact the sheets carry a Class 'O' Fire Rating. Polarex PVC Wall Cladding Sheets are tested using a method that assesses the effectiveness of Flame Retardant products using British Standard BS476, Part 6 & 7 (1989) and is used to classify a material in terms of "Spread of Flame". This rating is measured in two classifications: Class 'O' and Class '1' Spread of Flame. Class 'O' Fire Rating refers to a low surface spread of flame and the highest achievable result. This measure is usually applied to fire protection performance of walls and ceilings.
How are the Wall Cladding Sheets installed?
The sheets are installed by adhering to the wall / existing substrate using the Polarex 2-Part Adhesive using Polarex 5mm Notch Trowel. The adhesive takes 24 hours to cure, so we advise that you use the Polarex Double Sided Foam Tape to secure the Polarex PVC Wall Cladding Sheets in place and stop them from sliding whilst the glue fully cures. To view the full installation guide please click here or contact us on 0800 458 0753.
How can I ensure a smooth clean finish upon installation?
There are a range of matching trims and accessories or weld rod to give you the perfect finish. You can also use the Polarex Silicone Sealant which is available to match any of the products from the Polarex Pastels range and Polarex Colours range. The silicone sealant provides a watertight seamless finish, this is particularly useful in wet installation areas such as bathrooms and wet rooms etc.
What Warranty comes with the products featured on Polar Hygienic Finishes?
All products featured on the website offer a 10 Year Product Warranty.
Does the Polarex Lightweight Skeleton Thermoformer requires expertise/training in order to use?
No, the Thermoformer doesn't require a specific skill set to use. All you need to do is simply place the Polarex PVC Hygienic Wall Cladding Sheet onto the workbench, which is situated to the side of the Thermoformer. Put a mark at each end of the pvc sheet where it's to be bent. Slide the sheet across onto the Lightweight Skeleton Thermoformer lining up the marks with the centre of the element. Hold down firmly with the straight edge until the pvc sheet is pliable (ready to be thermoformed). Slide the sheet back onto the work bench and fold the sheet totally back on itself to set the bend (approximately 5 seconds). Lift the edge of the sheet to the required position and hold until the sheet has totally cooled (approximately 30 seconds), and then the thermoforming is complete.


text:
The 1999 MLB amateur draft was approaching. Tampa Bay – coming off their first ever season in franchise history – owned the first overall pick. They had their eyes on two particular prospects. Both were high school prospects hailing from the Southeast part of the country; one a right handed pitcher from Spring, TX, the other an outfielder from Raleigh. NC.
On the surface, both seemed like can't miss prospects. The pitcher from Texas – going into his junior year – had been named by Baseball America as the best prospect in the country. As a senior, he was named High School Player of the Year by USA Today. His bravado and blistering fastball overpowered high school hitters, tossing three no-hitters his junior year. He had committed to play baseball at Texas A&M, but it was well known he would not be attending college. The only question was if he were to go first overall to Tampa, or second to the Florida Marlins. If he were to go first, he would make MLB Draft history. No high school right handed pitcher had ever been taken first overall.
His competition from North Carolina also shared a strong arm, but his bat is what made him special. During his senior season, he hit .529 in 25 games with 13 home runs, 20 stolen bases, and 35 runs batted in. His 60 yard dash clocked at a 6.7. He could throw a baseball 97 mph from the outfield. He regularly parked baseballs on to his high school's football field – some estimated over 500 feet. His mesmerizing strength and power earned himself a nickname: "Hambone."
When it came down to both prospects, the talent was undeniable. The differentiator was in the intangibles. The pitcher from Texas had no shortage of swagger. He was good – his fastball touching 99 mph – and he wasn't afraid to let you know. This bravado created a layer of concern for Tampa Bay, giving the outfielder from Raleigh a slight edge. His personality anything but matched the swagger of his play: Straight edge kid, excellent grades, no drugs, alcohol, or girls. He even skipped his senior prom, worried he would get caught in the wrong crowd at the wrong time. Tampa Bay was sold. The talent would get him to the bigs. The character would keep him there for a long time.
With the first overall pick in the 1999 MLB Draft, Tampa Bay selected the outfielder from Raleigh giving him a then-record $3.96 million signing bonus. Four years later, most of it had been spent on crack cocaine. He didn't play a single day in the big leagues for Tampa Bay. His name was Josh Hamilton.
The young man from Texas went second overall to the Florida Marlins. His name was Josh Beckett. Beckett made his big league debut in September of 2001. In 2003, he helped Florida win their first ever World Series in franchise history. He was named World Series MVP.
"If this works, then stats are really for losers, I guess."
We'd seen this script before: Big, strong, mobile quarterback. Born and raised on the west coast. The best arm in the draft – maybe in the entire NFL. Can make all the throws. Has the ability to run through defenders or run circles around them. Dual sport athlete growing up, playing baseball through high school. Tremendous leader with strong intangibles – the first to show up and the last to leave. He's the kind of prospect that most scouts salivate over.
That is – if you're comfortable taking on the baggage.
For everything he possessed, this prospect had notorious issues with accuracy. In his last season in college, he completed 55.4 percent of his passes. He never eclipsed 60 percent. Instead of hanging in the pocket, he would bail early and rely on his athleticism to make plays. He had a tough time reading the field and making good decisions, often locking in on one receiver. He struggled against tougher competition, but also didn't have a ton of skill options at his disposal. The consensus? Huge boom or bust potential. Has all the makings of a star, but a few glaring issues that need improvement. Picking him was real world Russian Roulette: If you hit, you become a Super Bowl contender. If you don't, your franchise gets set back three years.
On draft day, this young man wasn't the first quarterback taken off the board. He didn't go in the top five picks. He eventually landed in the top 10 with a team from the AFC. No – his name was not Josh Allen. His name was Jake Locker, former standout quarterback prospect from the University of Washington. The draft year was 2011. Cam Newton went first overall to the Carolina Panthers. Locker went eighth to the Tennessee Titans.
Over four NFL seasons, Locker started 23 games for the Titans. He won just nine. Locker completed 57.5 percent of his passes, surpassing 60 percent just once in 2013 (in seven games). He threw 27 touchdowns and 22 interceptions, throwing more picks than touchdowns two separate seasons. He failed to throw for 2,000 yards in all but one. In 2014, Locker was replaced by LSU standout quarterback Zach Mettenberger. It was the last down of professional football he ever played, retiring in March of 2015.
Maybe that's why we – myself included – were so harsh on Allen when the Bills took him seventh overall in 2018.
You can go down the list: Drew Lock, Ryan Mallett, Christian Hackenberg. All of these prospects had big arms, great mobility, and were tremendous leaders – but none could overcome their glaring issues with accuracy, decision making, and pocket presence. If you inserted Allen's name into Locker's draft report, you wouldn't be able to tell the difference. Their evaluations were interchangeable.
Their success has been anything but.
In Allen's rookie season, he completed 52.8 percent of his passes and threw more picks (12) than touchdowns (10). Two seasons later, he finished second in the NFL MVP voting. In 2020, Allen completed 69.2 percent of his passes – the greatest single year improvement in NFL history (he completed 58.8 percent in 2019). He threw for 4,544 yards yards, 37 TD, and lead the Bills to their first playoff victory in 25 years. This past August, he penned a six year $258 million extension that will keep him in Buffalo through 2028. He's the odds on favorite to win NFL MVP in 2022. He was the third quarterback taken off the board in 2018.
Five different teams – Cleveland, New York Giants, Jets, Denver, Indianapolis – had an opportunity to draft Allen before Buffalo did. Since then, only two have made playoff appearances. One (Cleveland) has won a playoff game. The other – Indianapolis – lost to (guess who) Allen's Bills. This fall, Indianapolis will feature its fifth different quarterback under center over the past five years. If only they picked the right one five years ago…
At least they weren't the only team that missed out on a prospect named Josh.
Josh Allen's rise to fame isn't just a reflection of a calculated gamble. It's evidence of a situation most of us were completely unprepared for. Allen had all the red flags – accuracy issues, poor decision making, over-reliant on athleticism. As it turns out, these red flags weren't fixed traits. They were fixable. Accuracy isn't something that stagnates after high school. It's a skill that can be improved. Teams didn't miss out on Allen because of what he possessed. They missed out because they couldn't get over what he did not. We predicted his path before giving him a chance to carve out his own.
We were wrong – but it's not because teams failed to do their research. They just didn't have the right comparison. Prospects like Allen don't often pan out, so we used stories from the past to predict his future. Our inclination to draw comparisons caused us to draw the wrong comparison. Just imagine how different his draft stock would have been if Locker had blossomed into an NFL star.
Which makes Josh Hamilton's story even more interesting.
It's very similar to Allen's, but for opposite reasons. Instead of red flags, Hamilton possessed all the green ones – polish, clean cut, no girls, drugs, or alcohol, great family, strong work ethic. The red flags he possessed were largely hidden. They only appeared when he got involved with the wrong crowds while rehabbing an injury. The character that ultimately separated him from Beckett ended up deteriorating after a few bad decisions. His unexpected downfall is a lesson in hindsight, but with critical foresight: The events with the largest ripple effects aren't the ones we all predicted. They're the ones no one could have.
Hamilton was everything we were taught to admire in a prospect – and then he wasn't. Allen was everything we had been taught to avoid in a prospect – and then he wasn't. In a world of white swans, Allen and Hamilton are black swans. They're the outliers that broke the system.
Which means they'll help us build a better one.
The amateur draft is arguably the biggest crapshoot in all of professional sports. Every year, teams spend hundreds and thousands of dollars, hours, and sweat equity evaluating prospects. Boards are built out months in advance. Day by day, names are added and erased. Film is assessed. Interviews are collected. Scouts are deployed. Local, national, and cross-checker scouts are all in constant communication. The objective is well-known: Find players that are going to help win championships.
The execution is where it gets a little messy.
To put the difficulty of this feat into perspective, over 600 young men will hear their name called this July in the 2022 MLB Amateur Draft. Four out of five will never make it to the show. Of the ones that do, seven out of ten will be out of baseball within six years. This means if you can get four of your 20 draft picks to the show and one of those to a second contract, you've outperformed the majority of the league. You wouldn't listen to your local weatherman if he batted .200 on his forecasts. We celebrate scouts that do.
The biggest problem with drafts isn't what we know. It's wrestling with what we do not know. We're not betting on where the prospect currently stands. We're making an educated guess on what they're going to look like in three to five years. This starts by eliminating guess work, since our decision is ultimately a guess. Models are built out and constructed using characteristics from prospects that blossomed into stars. We gather data on current prospects – subjective and objective – and cross-reference it against previous ones to look for patterns.
As we gather more information about each prospect, we build out a narrative. Giving a young man millions of dollars is a huge risk. Our best strategy to alleviate that risk is to give him a story. We're constantly giving prospects a script to live up to (e.g. this kid reminds me of x big leaguer). You just have to make sure you give him the right one – which is where we were blatantly wrong on Hamilton and Allen.
The stories we craft are heavily dependent on the stories at our disposal. It's why any white quarterback New England drafts after the fourth round gets a Tom Brady comparison (sorry Jared Stidham). Draft comps aren't just a fun game to play. They're how we paint a picture for a specific prospect. Calling 2022 NFL Draft WR prospect Garrett Wilson a "dynamic prospect with playmaking traits" doesn't really differentiate himself from the pack. Comparing him to Buffalo's All-Pro WR Stefon Diggs does.
People were largely skeptical of Allen because of the narratives around prospects with big arms and accuracy issues. It's widely accepted throughout football that most quarterbacks don't improve on their accuracy beyond college – some even claim high school. It's not that it's physically impossible. We just don't often see it. As a result, we leaned on the stories we knew to be true – such as Locker's.
When you're making a draft pick that has franchise changing implications, it's tough to lean on a story that's not too popular. The right narrative alleviates the perception of risk. The lack of one only adds to it. You could argue this same reason is why Josh Beckett didn't go first overall to Tampa Bay. Historically speaking, there isn't a first round pick more volatile than the high school right handed pitcher. You can go down the list – Tyler Kolek (2014, No. 2 overall), Ashe Russell (2015, No. 21 overall), Kohl Stewart (2013, No. 4 overall), Riley Pint (2016, No. 4 overall). Whether it's injury, stuff, or intangibles – we know high school arms often have huge boom or bust potential. If you're picking first overall, you don't want a player that might pan out. You need a player that will.
When faced between two picks of risk, you're going to default to the one that's safest – even if the other is more intriguing. You bet on the floor at the expense of the ceiling. In Hamilton's case, the green flags he possessed alleviated enough doubt he wouldn't pan out. His narrative was safer to trust. Beckett's was riskier.
If we look at the 2018 NFL Draft, we see a similar pattern. Oklahoma's Baker Mayfield and USC's Sam Darnold separated themselves as the "safe" picks in the draft. Allen, on the contrary, was much risker. Coming out of high school, Allen had zero Division I offers – opting to go to junior college his freshman year. He later transferred out to Wyoming; a small school in a conference not well known for producing top tier NFL talent. In reality, it was his only choice. He was awarded second-team all conference his sophomore year, but only mustered 1,812 yards and 16 TD during his final season. He was not an all-conference selection. For reference, Mayfield threw for 4,627 yards and 43 TD. Darnold totaled 4,143 yards and 26 TD. Mayfield completed 70.5 percent of his passes. Darnold completed 63.1 percent. Allen completed 56.3 percent.
Mayfield was a touch undersized at 6'1", but you could see the fit – e.g. Russell Wilson. He played with a swagger that his teammates fed off, leading Oklahoma to two separate College Football Playoff appearances. His senior season, Mayfield famously planted Oklahoma's flag on midfield at Ohio State after defeating the ranked Buckeyes on the road. For some, it was too much. Mayfield didn't really care. He was going to bring it day in and day out, which made him an appealing option for a franchise craving a leader under center.
Darnold, on the other hand, was the dream quarterback prospect. He checked pretty much every box imaginable – 6'4" 220 lbs., hailing from a school (USC) with a strong lineage of NFL talent (Carson Palmer, Matt Leinart). Smooth, natural passer, excellent footwork, strong intangibles, and a track record of success – famously throwing for 453 yards in a comeback win against Penn State in the 2016 Rose Bowl. His regression in 2017 was enough to make Cleveland take a chance on Mayfield, but it didn't create enough doubt for the Jets to pass him up at three.
As it turns out, the safe picks weren't so safe after all.
This past offseason, Cleveland traded for QB Deshaun Watson – meaning Mayfield's time with the team has more than likely come to an end (pending Watson's current legal situation). The Jets have since moved on from Sam Darnold, drafting BYU product Zach Wilson with the second pick in the 2021 NFL Draft. Darnold is currently on Carolina, but lost his starting job last year to a familiar face in Cam Newton. Of the five quarterbacks selected in the first round of the 2018 NFL Draft, two are still with the team that drafted them – Allen and 2019 NFL MVP Lamar Jackson (Baltimore). Just like Beckett – the riskier picks ended up being the better picks.
Maybe it's time we stop looking at where all the chips have been placed and start looking for where they have not.
If we learn anything from the 1999 MLB Draft and 2018 NFL Draft, we need to be cautious of the narratives we assign to prospects. What seem "safe" is not always safe. There's inherent risk in every choice we make. We're never going to take risk out of the equation – and we shouldn't strive to. We can only seek to alleviate it as best as we can. All prospects will have their downfalls. Our job is to recognize the baggage they possess through a thorough evaluation and ultimately determine what we're comfortable taking on. After all, traits are paradoxical.
While Tampa Bay loved the dedication and discipline from Hamilton throughout high school, you could argue these qualities fueled his downfall. When Hamilton first got hurt, he no longer had the ability to throw himself into baseball. If you're not playing baseball games every evening, you're going to find other ways to fill your time. This put him in a vulnerable situation with the wrong crowd at the wrong time. One bad decision ended up compounding into many bad decisions.
While people were concerned Allen didn't play at a big school or put up big numbers in college, you could argue these traits became his biggest edge. He had been counted out his whole life, so he learned to never count himself out. Everything he did was done with a chip on his shoulder. All he needed was a foot in the door and the right situation, which Buffalo provided.
The stories of Hamilton and Allen illustrate one of the many paradoxes of life: The green flags can be red flags; the red flags can be green flags. The only thing left at this point is actually identifying these kinds of situations, to which an ugly truth presents itself: We'll never know. We only know after they happen, which is the frustrating – but also exciting – part. They're lessons in hindsight, but posses implications in foresight.
Our system for evaluation is in constant calibration. The prospects we all get right aren't the ones that have ripple effects on our decision making. They're the ones most of us get wrong. We learn more from prospects like Allen and Hamilton than we do anyone else. They challenge everything we thought we knew because they defied everything we thought they were going to be. If you can guess right when everyone else guesses wrong, you'll never have a better return on your investment.
While Allen and Hamilton have since updated our filing system of players, be sure of this: We are due to run into prospects with no precedent. They might have a unique niche or a glaring issue. Whatever it is, we are going to have to give them a grade. With that grade, we're going to have to assign them a story. This story will dictate our attitude towards them, which makes it so important we don't jump to the wrong one. If we don't know the destination, we shouldn't feel like we have to give them one. The stories we assign are the one we're most familiar with – which ultimately becomes the problem. Everyone should have the opportunity to write their own story. If you script out the ending before they have the chance to write it, they never will. Or, better yet, they'll write their own without your permission.
Plot twists are great entertainment until we become the entertainment.
We thought we knew what would happen to Hamilton and Allen based on what we knew from the past. We didn't consider an alternative reality because it didn't exist to that point. It's only a matter of time before we run into this problem again. A story left untold is better than the wrong one that gets told. Most will learn these lessons in hindsight. Your goal should be to learn them with foresight.
Drafting will never going to be easy, and it never should be. Group think doesn't differentiate yourself from the pack. Risk taking does. The amateur draft is the one consistent area of professional sports that is littered with taking chances we'll never be certain of. The goal isn't to be right. It's to be less wrong year in and year out – because we will be wrong again.
Maybe stats are for losers, after all.
Coaching, Decision Making, Football, Scouting Baker Mayfield, Buffalo Bills, Evaluation, Florida Marlins, Jake Locker, Josh Allen, Josh Beckett, josh Hamilton, MLB Draft, NFL Draft, Risk taking, Sam Darnold, Tampa Bay Devil Rays, Tennessee Titans
← How my time editing newspapers taught me something about hitting I couldn't quite understand
California – Thank You →

redpajama_set_name: RedPajamaCommonCrawl


This was my first #vlog attempt about 9 months ago.
Thank you to everyone who have reached out and threw me the idea of transforming my Blogs into Vblogs.
🤩World's Greatest Soap Opera I like to call Retail.
Previous Post: …and I'm Still Here.
Next Post: Yes…I did have a Blue Tongue.


text:
Nuketown Multiplayer Map To Return In 'Call Of Duty: Black Ops 2' … With A Catch
By The Movie God | @ | Friday, June 29th, 2012 at 1:30 pm
If you've played a lot of multiplayer games on Treyarch's Call of Duty: Black Ops, no doubt you've jumped at the opportunity to play your matches within the smallest map, Nuketown.
The map consisted of only two model homes, their back yards, and the street between them. The map allowed players to wage all-out war in a constricted area, leading to some of the more memorable battles you could take part in.
Now it looks like Nuketown will return in Treyarch's upcoming sequel to the game, Black Ops II. But in order to get the map, it looks like you'll have to pre-order the game.
Continue reading for more and to see an image.
The map's inclusion was discovered via a promotion retail stores like GameSpot have put out. And as you can see in an image of the promo below, the map will be re-imagined for the year 2025 (when the game is set).
My very first experience with multiplayer was Black Ops, and I was so bad at first that I almost swore it off completely, with Nuketown being the far and away most frustrating map of them all. But as I got better, it became a definite favorite, and I'm thrilled that it will be part of Black Ops II…even with the added catch of having to pre-order. Hopefully it'll eventually be made available via DLC for those who aren't big on pre-ordering their games.
This news just adds to my sky-high hopes for the game. Modern Warfare 3 maps aren't nearly as fun and Battlefield 3 multiplayer is an entirely different animal altogether (an animal that's also not nearly as fun), so I personally have all digits crossed for Treyarch to deliver more of the multiplayer action that hooked me into Black Ops.
Will you pre-order Black Ops II in order to score a new Nuketown map?
[Source: MP1st via Game Informer]
Topics: News, Video Games
Tags: Black Ops, Black Ops II, Call of Duty, Call of Duty: Black Ops, Treyarch
Edgar Wright Directed A Test Reel For Long-Gestating Adaptation of Ant-Man
'The Man With The Iron Fists' Trailer: A Bloody Glimpse Of RZA's Directorial Debut
• Game Review: Call Of Duty: WWII
• E3 2017: 'Call Of Duty: WWII' Multiplayer Trailer
• Reveal Trailer For 'Call Of Duty's Return To WWII Released
• E3 2016: Space 'Call Of Duty' Looks More Fun Than Expected
• Dark Horse Comics Releases For December 2, 2015


text:
namespace Shadow {

namespace Vision {

template <>
void Concat<DeviceType::kCPU, float>(const float* in_data, int count,
                                     int num_concats, int concat_size,
                                     int out_concat_axis, int in_concat_axis,
                                     int offset_concat_axis, float* out_data,
                                     Context* context) {
  for (int n = 0; n < num_concats; ++n) {
    memcpy(out_data + (n * out_concat_axis + offset_concat_axis) * concat_size,
           in_data + n * in_concat_axis * concat_size,
           in_concat_axis * concat_size * sizeof(float));
  }
}

}  // namespace Vision

}  // namespace Shadow

namespace Shadow {

REGISTER_OP_KERNEL_DEFAULT(ConcatCPU, ConcatKernelDefault<DeviceType::kCPU>);

#if defined(USE_DNNL)

class ConcatKernelDNNL : public ConcatKernel {
 public:
  void Run(const std::vector<std::shared_ptr<Blob>>& inputs,
           std::shared_ptr<Blob>& output, Workspace* ws, int axis) override {
    std::vector<dnnl::memory::desc> srcs_desc;
    std::vector<const void*> srcs_data;
    for (const auto& input : inputs) {
      srcs_desc.push_back(idnnl::create_memory_desc<float>(
          input->shape(), idnnl::get_memory_format(input->num_axes())));
      srcs_data.push_back(input->data<float>());
    }

    idnnl::concat_forward(
        ws->Ctx()->dnnl_handle(),
        dnnl::concat::primitive_desc(
            axis, srcs_desc,
            static_cast<dnnl::stream*>(ws->Ctx()->dnnl_handle())->get_engine()),
        srcs_data, output->mutable_data<float>());
  }

  DeviceType device_type() const override { return DeviceType::kCPU; }

  std::string kernel_type() const override { return "DNNL"; }
};

REGISTER_OP_KERNEL_DNNL(ConcatCPU, ConcatKernelDNNL);

#endif

}  // namespace Shadow

redpajama_set_name: RedPajamaGithub


text:
THX: What is it and how can it improve your Home Theatre experience?
Coming Home (1978): Eureka Masters of Cinema Blu-Ray Review
The Devil's Playground
In a vast sea of reviews, opinions and options, it can be tough to figure out which TVs and audio systems can really offer exactly what you need for your perfect home cinema experience. Never fear, the THX team are here to offer you an easy way to judge which equipment will truly do your favourite films justice with THX certification.
What is THX?
George Lucas' quest to see cinemas replicate the high quality audio of his films was the basis for THX, but they have since grown to cover visuals as well, ensuring films don't just sound great, but also look how they're intended to. With cinemas and home entertainment systems becoming increasingly similar in quality, it's no wonder they decided to also focus on high-quality TV sets too.
What does THX certification mean for you?
THX-certified TVs have been thoroughly tested with the one goal of making sure your favourite films are given the visual treatment they truly deserve. The process involves ensuring TVs are at the top of their game for contrast, as well as colour quality and accuracy, all imperative for viewing the stunning, must-see scenes. They also confirm that televisions can maintain crisp, high-quality images even in the most fast-paced action scenes, so you'll never be lost whether watching speedy space battles, quick-moving sports events or anything else your films can throw at you.
To coincide with Lucas and the sci-fi theme, we've compiled our indispensable list of 4K film releases that are the perfect match for a THX-certified experience.
STAR WARS franchise (1977 – now)
Starting with Star Wars of course, there's no other film series that can evoke such child-like wonder with its laser blasts, lightsaber duels and space battles that just beg to be presented on a giant screen with booming speakers.
Stanley Kubrick's arthouse epic 2001: A Space Odyssey was an incredible feat of technical film making in 1968 and it's spellbinding visuals and audio still have the power to amaze audiences today.
BLADE RUNNER (1982)
The original sci-fi film noir classic Blade Runner never gets old and even though it was released in 1982, it still feels as fresh, impressive and powerful as ever.
Despite having spawned countless sequels and spin-offs, the horror sensation that is Alien has never been topped for its tension, atmosphere and gritty take on the future.
Inception might not take place in space or another planet, but it's sci-fi credentials easily stand side by side with the classics, with its inventive visual storytelling, trippy set pieces and of course, unforgettably masterful Paris folding buildings scene.
Editorials, Features, Lists
AlienBlade RunnerHome CinemaInceptionsci fistar warsTHX
Alien, Blade Runner, Home Cinema, Inception, sci fi, star wars, THX
Aliensci fistar wars
5th Passenger
by Sean Burton on February 11, 2019
Don't let this one on board.
by The Movie Bastard on May 11, 2018
The Movie Bastard gives his reasons as to why he feels Alien: Covenant is a significant upgrade to Prometheus, but still dilutes a once great movie series.
Prometheus: Why The Hate?
by Oliver Woodings on March 11, 2017
Oliver Woodings looks at why mainstream movie goers didn't take too kindly to Ridley Scott's Prometheus, and argues whether it really deserved the backlash it received.
5 Greatest Horror Villains
We reveal the results of a recent poll of the top horror villains.


Browse seats for Jane Krakowski below. Jane Krakowski marked a revolution on Broadway that you need to experience firsthand. When you buy tickets for Jane Krakowski, they will arrive in plenty of time for the performance. Jane Krakowski has phenomenal stage effects that could rival any show on Broadway. We sell VIP tickets for every performance of Jane Krakowski. TicketWebsiteHQ.com is the premier source for Jane Krakowski tickets. When you experience Jane Krakowski, you could have the time of your life. At Ticket Website HQ, we offer front row Jane Krakowski tickets, VIP Jane Krakowski tickets, and Jane Krakowski seating charts. Seats for all showings of Jane Krakowski are available now! View any Jane Krakowski tickets from the schedule and compare prices. All tickets, including Jane Krakowski tickets will be processed within 24 hours.


This episode of Friends Talking Faith with The Three Wise Guys was recorded live at South University College of Theology, in Orlando, Florida. We'll be talking with students, professors, and folks from the community about faith and the relevance of religion in our daily lives. According to the Pew Research Center, in studies conducted over the last decade — while roughly 90% of Americans say that they believe in God — affiliations with the institutional church have been in sharp decline. The percentage of adults describing themselves as religiously affiliated has shrunk from 83% to 77% over the last 10 years. Only about 50% of the US adult population says they attend religious services at least monthly. We'll talk about what these statistics might mean in terms of the relevancy and importance of religion in the lives of Americans today. Our conversation with Dr. Paul McCuistion, and the audience at South University College of Theology – that's coming up on this episode of Friends Talking Faith.


At PeoplePerHour our Buyers and Freelancers are authentic. We urge our users to always verify their PPH Account with us whilst use their real profile picture as well as their real information.
Our Payment Team is here to assure that all of our users are verified under our platform and that there is no bypassing or any breach of our Terms and Conditions. Your information is not shared with any third party website and it is strictly kept under our system for your safety. We can imagine that you may feel concern in supplying this documentation but would like to advise that we are registered with the Information Commissioner's Office and we are legally obliged to protect any personal information that we hold under the Data Protection Act.
We hope you understand that we have the best interests of our customers and KYC compliance regulations in mind when performing these checks.
If you are a Buyer or a Freelancer, you may receive an email prompting you to verify your PPH Account by providing us and uploading your Identification Documents.
Kindly follow these steps and your PPH Account shall be verified within 7 working days.
1. Once logged in go under your Profile > Settings.
2. Go under Settings > Payments.
3. Upload all the requested Identification Documents and click Submit.
4. Once the documents are uploaded you will be asked if you want the process to be Fast Tracked (get your documents approved within 24Hrs) or Basic (getting them approved within 7 working days).
5. Kindly wait for our Payment Team to approve your documents.
If you experience a problem with your account verification you can contact our customer support team by clicking here.