Тинькофф каминг аут: Тиньков совершил фейковый каминг-аут
Содержание
Тиньков объяснил иронией заявление о своей нетрадиционной ориентации :: Экономика :: РБК
Глава банка «Тинькофф Кредитные системы» Олег Тиньков объяснил иронией запись в «твиттере» о своей нетрадиционной сексуальной ориентации. В беседе с РБК он уточнил, что хотел пошутить над главой Apple Тимом Куком
Глава банка «Тинькофф Кредитные системы» Олег Тиньков
(Фото: РБК)
«Я уже думал, что мой эпатаж в «твиттере» не вызовет такой массы статей – нет, еще могу», – пояснил свою шутку РБК Тиньков. «Поверили, что я гей; как можно поверить, в то, что я – гей, не ясно совсем», – добавил он. По его словам, таким образом он попытался иронизировать над главой Apple Тимом Куком.
В четверг в «твиттере» Тинькова появилась запись о том, что он гей. «Хорошо, теперь моя очередь раскрыть себя, вслед за моим другом Тимом. Я – гей, и горжусь этим», – написал в соцсети Тиньков, прикрепивший к этой записи фотографию с менеджером российской велокоманды Tinkoff-Saxo. В пятницу пресс-служба банка сообщила, что заявление бизнесмена – это шутка.
Накануне глава Apple Тим Кук публично признался в своей нетрадиционной ориентации. В колонке журнала Businessweek он написал, что никогда не отрицал, что он гей. «Но в то же время до сих пор я не говорил публично о своей нетрадиционной сексуальной ориентации», – пояснил Кук. Он также отметил, что позволил себе открыто говорить о своей гомосексуальности, потому что мир за последние десятилетия изменился, и общество стало более терпимым.
Тиньков входит в рейтинг журнала Forbes топ-100 российских миллиардеров. Он является контролирующим акционером (50,9%) банка «Тинькофф Кредитные системы» и основателем бренда «Тинькофф».
Автор
Евгений Королев
Канадская биатлонистка сделала каминг-аут
Канадская биатлонистка сделала каминг-аут
Чемпионка мира среди юниоров канадка Меган Бэнкс призналась в нетрадиционной сексуальной ориентации.
— Какое-то время я скрывала часть самой себя, но больше не хочу тратить физическую и эмоциональную энергию, чтобы утаивать то, чем я горжусь. Итак, начнём: я гей. Почему я решила объявить об этом? Зачем писать в социальных сетях? Потому что я считаю, что представительство в спорте, искусстве, политике и во всех других областях имеет значение. Я знаю, что мы не живём в обществе, которое одновременно принимает и приветствует все маргинализированные сообщества… Пока. Я надеюсь, что, продолжая признавать разнообразие как нечто положительное, а не как недостаток, каждый сможет жить, как он сам захочет, при этом к нему будут относиться с добротой и признавать, что каждый человек имеет значение.
— У меня большие планы в биатлоне, и я хотела бы сделать всё, что в моих силах, чтобы тренироваться и соревноваться на высшем уровне. Необходимая часть этого — заботиться о себе и жить как можно более аутентично. Мне не нравится навязываться, но я хочу использовать привилегию, которая у меня есть как у спортсмена и образца для подражания, чтобы внести свой вклад, чтобы показать молодым спортсменам, что они могут быть теми, кем они хотят, жить без дискриминации.
— Я многим обязана всем ребятам (в особенности спортсменам топ-уровня), которые сделали каминг-аут до меня, и я думаю, что важно признать, что все они сломали некоторые препятствия и начали говорить о проблемах. Без них моё решение выступить публично и моя жизнь до этого момента, несомненно, были бы более сложными. Наконец, хочу отметить всю поддержку, которую получила, когда начала рассказывать людям о том, какая я на самом деле. Я получила столько добра и поддержки от моих друзей, семьи, товарищей по команде. Для меня действительно очень важно знать, что меня любят за то, какая я есть, так что спасибо, ребята! — написала Бэнкс на своей страничке в Instagram.
https://www.instagram.com/p/CEzjLkoDsER/
23-летняя Бэнкс является чемпионкой мира среди юниоров 2017 года, а также призером этапа Кубка IBU.
Тинькофф чемпионат России по футболу (РПЛ)
«Колпинская ракета» вновь нарядится помидором и приедет в Петербург
поболеть за «Спартак». Разбираемся, почему так происходит и стоит ли
болельщикам «Зенита» остро реагировать?
Каминг-аут
Изучая
страницы Александра Панова в соцсетях, можно прийти к двум выводам.
Первый: что-то разделило жизнь человека на «до» и «после» в 2017-м.
Второй: «Колпинскую ракету» украли и держат в плену, заменив на
клона-провокатора.
Прежде сокрушитель Фабьена Бартеза и Евгения
Плотникова публиковал фотографии семьи, с ветеранских турниров, архивные
фото игр «Зенита», «Динамо», «Сент-Этьена», «Торпедо»; кадры, где
форвард занимается ФААП (Футбольная ассоциация Александра Панова).
Подписи — спокойные. Наряды — обычные, практичные, разнообразной
расцветки.
В марте 2017-го Панов облачился в красное, забыл про
орфографию, пунктуацию, стал пользоваться «капсом», делать селфи с
бутафорским и настоящим оружием, постить околофутбольные картинки с
подписями: «ЗАРЯД ЕЩЕ МОЩНЕЙ МЫ МЯСО ВСЕХ СИЛЬНЕЙ», «ХОТЬ НАШ ДВИЖ
МОЛОДОЙ НО ДЕРЗКИЙ МЫ В ВСЕГДА В ТЕМЕ!!! СПАРТАК ВМЕСТЕ НАВСЕГДА!!!» и
т. д. «ДИРЕКТОР ФУТБОЛЬНОЙ ШКОЛЫ АЛЕКСАНДРА ПАНОВА ПАНТЕРА» — знакомит
подпись Панова в «Инстаграме».
А прошлым летом, незадолго до матча
4-го тура «Зенит» — «Спартак» (5:1), Пан взорвал инфопространство,
публично признавшись в любви к красно-белым и купив абонемент в
фанатский сектор. Сделал своеобразный «каминг-аут». В интервью «Спорт
ФМ» располневший форвард, в частности, сказал: «К сегодняшнему «Зениту» у
меня симпатий нет. <…> Готов пробить первый выезд за «Спартак» на
матч против «Зенита». Буду ходить по Санкт-Петербургу в красно-белом
шарфе и красной футболке».
Панов сдержал обещание, надев не
только шарф и футболку, но и красные штаны. Погуляв по городу в таком
виде, Александр выложил фотоотчет, где предстал в образе человека,
похожего на «овощ», рекламирующий популярный сок. После игры фанаты
«Зенита» пожурили бывшего кумира у стадиона «Санкт-Петербург». Случился
инцидент. Панов недоумевал: за что такая реакция, ведь я, дескать,
никого не предал?
Как был гопником, так и остался
В этом
году Александр анонсировал в «Инстаграм» новое путешествие в Петербург.
«ГОТОВИМСЯ НА ВЫЕЗД!!! ПОДДЕРЖИМ НАШ СПАРТАК В ПИТЕРЕ!!!», сопроводив
текст картинкой: оскалившийся хряк в ошейнике на фоне дьявольской
пентаграммы с подписью Evil Meat in the City. Tour St. Petersburg.
В
конце концов, это личное дело Панова, за кого и чем болеть, скажете вы —
и будете правы. Но на болезнь эти высказывания похожи лишь отчасти.
Провокация. Все-таки известная личность, бывший кумир Питера. Панов
объясняет смену цветов тем, что давно живет в Москве. Но многие люди,
переехавшие в другой город, продолжают поддерживать родные клубы.
«Тебе не стыдно, Саша?» — спрашивали фаны в прошлом году. Ждет ли человека в красном «теплый прием» в этом сезоне?
—
Не хочется много говорить на эту тему, — сказал один из авторитетнейших
фанатов зенитовского движения. — Зачем людям, которые вознесли его до
небес, как-то реагировать? Как был гопником, так и остался. Подлый
человек.
Есть ли у Панова причины обижаться на «Зенит» и были ли возможности «переобуться» раньше? Попробуем разобраться.
Экскурс в историю. Приглашение Олега Романцева. Неработающий колобок
Он
«сделал карьеру» за две недели. 26 мая 1999-го заставил говорить о себе
весь Петербург, забив два гола московскому «Динамо» в финале Кубка
России, а 5 июня дважды поразил ворота Фабьена Бартеза на «Сен-Дени»
(Франция — Россия, ОЧЕ-2000, 3:2 в нашу).
Знающие Панова люди
рассказали, что после этих подвигов нападающий считал себя «вторым
Казаченком», полагая, что заслуживает такого же отношения. Ладно, Бартез
и чемпионы мира — но он принес Петербургу первый трофей спустя 15 лет!
Через
год «Зенит» продал форварда в «Сент-Этьен» за рекордные 2 млн евро.
Переполненный «Петровский» провожал Панова, об отъезде снимали сюжеты
для ТВ, а сама «ракета», обвешанная шарфами, пробежалась по дорожкам
стадиона, размахивая многочисленными букетами. Петербург гордился,
плакал, рукоплескал.
Дальше — многообещающий старт во Франции.
Первый гол во втором матче Лиги 1. Но за полгода Пан провел семь матчей и
отправился в швейцарскую «Лозанну», где сыграл на правах аренды в
четырех матчах из 14 возможных. Позже форвард назвал причину неудачи —
возможное заражение гепатитом С (диагноз не подтвердили). «Сент-Этьен»
вылетел во вторую лигу, нападающий за полгода сыграл восемь «холостых»
матчей и вернулся в московское «Динамо», чтобы через полгода очутиться… в
петербургском, которое «гремело» в первом дивизионе.
Тогда у
Панова и затаилась первая обида на «Зенит». Ведь он считал, что,
во-первых, клуб должен был помочь в период неподтвержденного гепатита,
во-вторых, подписать с ним контракт после неудавшейся поездки в
«Сент-Этьен».
В марте 2006-го (тогда возвращение Панова в «Зенит»
могли воспринять как пошлую шутку) нападающий дал интервью редактору
отдела футбола «Спорта День за Днем» Алексею Павлюченко, в котором
заявил:
— Тренер «Спартака» Олег Романцев приглашал меня в свою
команду не один раз. Однако я обещал болельщикам, президенту «Зенита»
Виталию Мутко, что уезжать буду только за границу. Может, кому-то мои
слова и покажутся высокопарными, но я всегда ощущал себя патриотом. И
долгое время оставался верен «Зениту». Болельщики просили: «Только не
уходи в «Спартак»!» Вы же знаете, какие отношения были между фанами.
Хотя сегодня понимаю, что упустил возможность поиграть вместе с
Тихоновым, Цымбаларем, Аленичевым, Титовым. Мог стать чемпионом России,
сыграть в Лиге чемпионов.
Спустя несколько месяцев «Зенит» купил
30-летнего Панова у «Торпедо» за 400 тысяч евро. За полгода он вышел в
семи матчах — когда на пять минут, когда на семь, когда на одну. Зимой
Панова отправили обратно, в «Торпедо», игравшее лигой ниже.
Обида
крепла. Источники говорят, что Панов не считал возвращение в «Зенит»
пиар-акцией и был уверен, что принесет команде пользу. Позже Владислав
Радимов раскритиковал «ракету» в СМИ:
— Как футболист он уже к
тому времени весь «вышел». Просто так получал большие деньги. Сидел на
«банке», на тренировки с во-о-от таким пузом выходил. Это уже не
футболист был, а колобок. В 2006 году играем со «Спартаком» в Москве, за
пять минут до конца выходит Панов. На 93-й минуте не побежал за своим
защитником, тот сделал пас Быстрову и — решающий гол нам. После этого
ребята подошли к Адвокату и попросили Панова больше никогда не ставить.
Мы бьемся-бьемся, а этот колобок позволяет себе не работать на поле.
Панов
посчитал, что клуб его как минимум подвел. Причем дважды. Человек,
принесший трофей, первый за несколько лет зенитовец в сборной,
покоритель Франции, человек, обогативший казну на 2 млн. Неужели «Зенит»
ничего не дал колпинскому футболисту? Вернемся в начало 1990-х.
«Красный Октябрь»
Панов,
по собственному признанию, чинил беззаконие в Колпино, занимался
уличным разбоем, употреблял внутривенные наркотики, не появлялся на
тренировках.
Рассказывает главный тренер «Ленинградца», бывший игрок и тренер «Зенита» Борис Рапопорт:
—
Мы его спасли, вытащили, переселили в начале 1990-х из Колпино в
пансионат «Красный Октябрь». Игроки «Зенита» тогда заезжали туда на
предматчевый карантин, и мы договорились, что в пансионате также будут
жить некоторые игроки без контрактов. Организовали для них питание.
Очень сомневаюсь, что, если бы Саша остался в Колпино, он не только
состоялся бы как футболист, но и вообще был бы жив. Позже играл у нас с
Мельниковым в первой лиге. Но потом нас убрали, и возглавивший «Зенит»
Павел Федорович Садырин от Панова отказался. Дальше он скитался:
Вологда, Китай. А через два года, когда пришел Бышовец, Евгений Наумович
Шейнин (директор СДЮСШОР «Зенит». — «Спорт День за Днем») просто
уговорил его взять Панова. Я был свидетелем этого разговора. И у Бышовца
он заиграл! Ситуация странная, меня удивляет поведение Саши, что-то на
него негативно влияет. С ним не разговаривал десять лет, сам он на
контакт не идет… Если он приезжает сюда в красных цветах… Это демарш,
конечно. Больше желание досадить «Зениту», нежели поддержать «Спартак».
Он же не сошел с ума. Делает эти вещи сознательно. Планирует снова
приехать в Питер в красном? Ну что ж, получит! (Смеется.)
К слову,
в «Зените» Бышовца Панов заиграл не сразу. Сидел на скамейке. Тренер
перестроил игру команды, затачивая действия хавбеков под быстроногого
форварда. Хотя тренеру говорили: «Зачем брать? Его же из-за травы не
видно!»
Стоит ли обижаться
Панов — не легенда «Зенита».
Взять хотя бы статистику: 36 голов в 137 матчах за шесть сезонов.
Показатели других форвардов, которые, по мнению многих, не оставили
такого следа в истории: Саломон Рондон — 28 голов в 58 матчах за полтора
сезона, Артем Дзюба — 46 голов в 109 матчах за три сезона с хвостиком.
КПД Панова близок к КПД Предрага Ранджеловича — 4 гола в 17 матчах.
Так
откуда статус легенды и такая реакция? Несколько факторов сошлись. Не
хватавший звезд с неба «Зенит», изголодавшийся по победам Питер,
гегемония игроков «Спартака» в сборной… И тут — взрыв: Кубок! Триумф
национальной команды во Франции! И всюду солирует петербуржец. Трансфер
за границу. Позже, кстати, Панов назвал главной командой в карьере
«Торпедо», а не «Зенит».
Может, популярный фанат «Спартака»
задирается, чтобы показать: плевать он хотел на «Зенит» и тех, кто
обошелся с ним несправедливо. Но в итоге плевки летят в болельщиков, не
виновных в злоключениях форварда, не предававших, в тех, кто искренне
радовался его успехам.
Но, скорее всего, бесхитростный Панов «без
задней мысли» топит за «Спартак». Забывая, что является публичной
личностью и что его в «Твиттере» читают не только друзья. Саша,
остановись! Если Панов задумал провокацию — не поддавайтесь. Тем более
что в том году она удалась.
Использованы фото: ФК «Зенит», из архива газеты «Спорт День за Днем»
Оцените материал:
Добавьте «Спорт день за днём»
в список ваших источников
Бюджетный DI на антипаттернах / Блог компании TINKOFF / Хабр
Согласитесь, приятно бывает после утомительного трудового дня отточенным движением руки решительно закрыть рабочий workspace в Xcode, чтобы, облегченно вздохнув, открыть другой workspace — со своим домашним проектом.
А если сегодня еще и пятница, то можно позволить себе немного похулиганить, нарушив пару принципов и хороших практик. Ведь единственный разработчик, которому потом придется смотреть в глаза, — это вы сами: прекрасный, понимающий собеседник, готовый идти на компромиссы.
Советую запастись дошираком и энергетиками. Перед вами — серия статей о том, как я ни в чем себе не отказывал, реализуя MVVM в одном из своих домашних проектов. Сегодня пилотный выпуск — про управление зависимостями.
Введение
Перво-наперво хочется совершить виртуальный каминг-аут и признаться, что я большой фанат паттерна MVVM. Для меня он не ограничивается сплошной стрелочкой, направленной от View к ViewModel и пунктирной — в обратном направлении. Правильно приготовленный MVVM, как мне кажется, — это инфраструктура, если хотите — фреймворк, включающий в себя, кроме реализации самого паттерна, решение для управления зависимостями, реализацию роутинга и ряд вспомогательных компонентов для упрощения жизни, здоровья и долголетия.
Именно этим и занимались первые MVVM-фреймворки, с которыми я работал в незапамятные времена, когда мобильных платформ было больше двух. Именно этим я планирую заниматься ближайшие три статьи. А начнем мы с управления зависимостями, потому что это фундамент, на котором держится весь увлекательный мир вашего iOS-приложения.
Однажды я прочитал где-то, что в любой качественной статье должно быть хорошее содержание. Вот и в этой статье пусть будет хоть что-нибудь от качественной.
Хорошее содержание
Принципы
Чтобы придать своему коду больше цельности, а самому себе — значимости, я решил, что весь код в этой и последующих статьях должен по возможности подчиняться нескольким общим принципам. Вот они:
- Не выпендривайся. Тупой и понятный код в большинстве случаев лучше умного и непонятного.
- Будь краток. Кода должно быть настолько мало, чтобы его не жалко было в любой момент выкинуть и написать заново за один день.
- Удобство превыше правил. Если можно облегчить себе жизнь, пожертвовав принципами SOLID, пожертвуй принципами SOLID.
- Получай удовольствие. Если есть разные варианты решения проблемы, выбирай более веселый.
Иметь такой список принципов очень удобно: это оправдывает все странные решения, которые я собираюсь принимать на протяжении трех статей.
Проблема управления зависимостями
Проблема управления зависимостями довольно типичная в программировании. Мало какая сущность в коде может похвастаться независимостью как твоя бывшая. Обычно все от кого-нибудь зависят. В MVVM, например, вью-контроллер зависит от вью-модели, которая подготавливает для него данные. Вью-модель зависит от сервиса, который за этими данными ходит в сеть. Сервис зависит от другого сервиса — низкоуровневой реализации сети, и так далее. Все эти сущности, которых может быть великое множество, нужно где-то создавать и как-то доставлять до потребителей. Для любой типичной проблемы, как правило, есть типичное решение — паттерн. В случае с проблемой управления зависимостями таким паттерном является Dependency Injection (DI) контейнер.
У меня нет намерения подробно объяснять, что такое DI-контейнер. Про это классно рассказывают в двух статьях из репозитория Ninject: раз, два (уберите от экрана детей, там код на С#). Еще есть небольшое объяснение в репозитории самого популярного DI-контейнера под iOS — Swinject (заметили, что Swinject — это Ninject на Swift?). Хардкорщикам могу предложить статью Фаулера от 2004 года.
Тем не менее не могу отказать себе в удовольствии немного поумничать и скажу, что DI-контейнер — это такая шляпа, из которой как кролика за уши можно достать практически любую сущность вашей программы. Если эта сущность зависит от других сущностей, а те, в свою очередь, еще от каких-то — DI-контейнер знает, что со всем этим графом зависимостей делать. Если у вас в проекте есть DI-контейнер, то на извечный вопрос «как мне прокинуть зависимость A до сущности B» всегда будет один и тот же ответ: «сущность B следует достать из контейнера, который сам рекурсивно разрешит все ее зависимости».
Решение
Существует несколько довольно популярных реализаций DI-контейнеров под iOS (Swinject, Cleanse, Dip, DITranquility, EasyDI), но использовать чужую реализацию, согласитесь, скучно. Гораздо веселее использовать мою.
Готовы немного развлечься и написать DI-контейнер с нуля? Похожую реализацию мне показал однажды один из самых крутых iOS-разработчиков, простой сибирский парень teanet, за что ему огромное спасибо. Я ее немного переосмыслил и готов поделиться с вами. Начнем с протокола IContainer
:
protocol IContainer: AnyObject {
func resolve<T: IResolvable>(args: T.Arguments) -> T
}
Привычка из прошлой жизни — я всегда пишу I перед протоколами. Буква I значит interface. У нашего интерфейса протокола всего один метод resolve(args:)
, который от нас принимает какие-то аргументы T.Arguments
, а взамен возвращает экземпляр типа T
. Как видно, не любая сущность может быть Т
. Чтобы стать полноправным T
, нужно реализовать IResolvable
. IResolvable
— это еще один протокол, о чем нам услужливо подсказывает буква I в начале имени. Он выглядит вот так:
protocol IResolvable: AnyObject {
associatedtype Arguments
static var instanceScope: InstanceScope { get }
init(container: IContainer, args: Arguments)
}
Все кролики, которые хотят быть доступны из шляпы, обязаны реализовать IResolvable
.
Самое главное здесь — инициализатор, принимающий сам контейнер и аргументы. Предполагается, что каждая сущность, реализуя этот инициализатор, сама достанет прямо из контейнера нужные зависимости. А если этому кролику для полноценного существования нужны еще какие-то аргументы, то пожалуйста — они тоже есть в инициализаторе.
Свойство instanceScope
отвечает за область видимости, в которой будет существовать экземпляр объекта:
enum InstanceScope {
case perRequest
case singleton
}
Это довольно стандартная для DI-контейнеров штуковина. Значение perRequest
означает, что для каждого вызова resolve(args:)
будет создан новый экземпляр T
. Значение singleton
означает, что экземпляр T
будет создан единожды — при первом вызове resolve(args:)
. При последующих вызовах resolve(args:)
в случае singleton
будет отдаваться закэшированная копия.
С протоколами разобрались, приступаем к реализации:
class Container {
private var singletons: [ObjectIdentifier: AnyObject] = [:]
func makeInstance<T: IResolvable>(args: T.Arguments) -> T {
return T(container: self, args: args)
}
}
Тут ничего особенного: кэш синглтонов будем хранить в виде словаря singletons
. Ключом словаря нам послужит ObjectIdentifier
— это стандартный тип, поддерживающий Hashable
и представляющий собой уникальный идентификатор объекта ссылочного типа (через него, кстати, реализован оператор ===
в Swift). Метод makeInstance(args:)
умеет на лету создавать любые экземпляры T
благодаря тому, что мы обязали все T
реализовать один и тот же инициализатор.
В Swift принято выносить реализации протоколов в отдельный экстеншен. Не будем выделяться и поступим как принято — покажем старику Латтнеру, что мы говорим на его родном языке без акцента. Нам нужно всего лишь реализовать один метод:
extension Container: IContainer {
func resolve<T: IResolvable>(args: T.Arguments) -> T {
switch T.instanceScope {
case .perRequest:
return makeInstance(args: args)
case .singleton:
let key = ObjectIdentifier(T.self)
if let cached = singletons[key], let instance = cached as? T {
return instance
} else {
let instance: T = makeInstance(args: args)
singletons[key] = instance
return instance
}
}
}
}
Здесь все довольно прозаично: если T
хочет быть perRequest
, сразу возвращаем новый экземпляр. В противном случае нужно залезть в кэш. Что в кэше найдем — достаем, отдаем, чего в кэше не найдем — создаем, в кэш кладем, отдаем.
Вот, собственно, и все. Мы только что написали свой DI-контейнер в 50 строк кода. Но как этой штукой вообще пользоваться? Да очень просто.
Пример использования
Для примера рассмотрим хрестоматийную историю с клиентами и их заказами. Пусть мы хотим отобразить список заказов конкретного клиента на определенную дату. Заведем для наших целей две сущности: OrdersProvider
и OrdersVM
— эти ребята должны быть доступны из контейнера, а значит, им придется реализовать IResolvable
.
Мне лениво каждый раз при реализации IResolvable
имплементировать instanceScope
, поэтому, прежде чем погрузиться в увлекательный мир прикладного программирования, предлагаю обмазаться парочкой полезных экстеншенов.
Полезный экстеншен номер раз:
protocol ISingleton: IResolvable where Arguments == Void { }
extension ISingleton {
static var instanceScope: InstanceScope {
return .singleton
}
}
И второй такой же, но другой:
protocol IPerRequest: IResolvable { }
extension IPerRequest {
static var instanceScope: InstanceScope {
return . perRequest
}
}
Теперь вместо IResolvable
можно конформить более лаконичным ISingleton/IPerRequest
и сэкономить тем самым несколько секунд жизни, потратив их на саморазвитие. А вот и реализация OrdersProvider
подъехала:
class OrdersProvider: ISingleton {
required init(container: IContainer, args: Void) { }
func loadOrders(for customerId: Int, date: Date) {
print("Loading orders for customer '\(customerId)', date '\(date)'")
}
}
Мы предоставили required init
, как того требует протокол, но, так как OrdersProvider
ни от чего не зависит, этот инициализатор у нас пустой. Каждый раз, когда мы будем доставать OrdersProvider
из контейнера, мы будем получать один и тот же экземпляр, потому что такова дефолтная реализация instanceScope
для ISingleton
.
А вот и модель представления собственной персоной:
final class OrdersVM: IPerRequest {
struct Args {
let customerId: Int
let date: Date
}
private let ordersProvider: OrdersProvider
private let args: Args
required init(container: IContainer, args: Args) {
self. ordersProvider = container.resolve()
self.args = args
}
func loadOrders() {
ordersProvider.loadOrders(for: args.customerId, date: args.date)
}
}
Эта вью-модель не может существовать без аргументов OrdersVM.Args
, которые мы получаем через required init
. В этот инициализатор также попадает сам контейнер, из которого мы без лишней суеты извлекаем экземпляр OrdersProvider
посредством вызова resolve()
.
Вызов метода loadOrders()
использует ordersProvider
для загрузки заказов, предоставляя ему необходимые для работы аргументы. Каждый раз, когда мы будем доставать OrdersVM
из контейнера, мы будем получать новый экземпляр, потому что такова дефолтная реализация instanceScope
для IPerRequest
.
Финальный штрих. Чтобы получить готовый экземпляр вью-модели, просто достанем его из контейнера, вот так:
let container = Container()
let viewModel: OrdersVM = container. resolve(args: .init(customerId: 42, date: Date()))
viewModel.loadOrders()
Для справки, на момент написания этих строк, код выше производит следующий консольный вывод:
Loading orders for customer '42', date '2020-04-22 17:41:49 +0000'
Критика
Использовать или не использовать DI-контейнер из этой статьи в вашем проекте — решать не мне. Как ответственный автор, я могу всего лишь предлагать варианты и рассказывать о плюсах и минусах одинаково объективно.
Пытливый ум усидчивого читателя заметит, что реализация, представленная выше, если честно, не очень похожа на DI-контейнер. Эта реализация больше похожа на Service Locator, который, откровенно говоря, в приличном обществе принято считать не иначе как антипаттерном.
Не хочется в рамках данной статьи углубляться в тонкости отличия DI-контейнера от локатора служб, про это можно почитать у того же Фаулера. Но если грубо, то при использовании DI-контейнера ваша сущность, скорее всего, принимает в конструктор инициализатор некий набор зависимостей, закрытых интерфейсами протоколами. Примерно так:
final class OrdersVM {
private let ordersProvider: IOrdersProvider
init(ordersProvider: IOrdersProvider) {
self.ordersProvider = ordersProvider
}
}
Если вы осмелились использовать Service Locator, тогда ваша сущность, вероятно, достает зависимости из какого-нибудь сомнительного места типа статической фабрики. Например, вот так:
final class OrdersVM {
private let ordersProvider: IOrdersProvider
init() {
self.ordersProvider = ServiceLocator.shared.resolve()
}
}
Программисты недолюбливают Service Locator в первую очередь за то, что он скрывает истинные зависимости сущностей при их создании.
С практической точки зрения это означает, что нет никакой возможности понять, что OrdersVM
зависит от IOrdersProvider
— для этого нужно читать код инициализатора. Кроме того, OrdersVM
напрямую зависит от ServiceLocator
, что затрудняет переиспользование этого класса в системах, где для DI может быть выбрано другое решение.
Второй, более важный, на мой взгляд, недостаток текущей реализации заключается в том, что мы самым чудовищным образом игнорируем букву D в сакральной для многих программистов аббревиатуре SOLID. Напомню, что D в SOLID — это так называемый принцип инверсии зависимостей, который гласит, что все сущности, грубо говоря, должны зависеть от абстракций.
Все наши сущности, если приглядеться, вообще ни капельки не зависят от абстракций. Напротив, они сами решают, какую конкретную реализацию своих зависимостей следует использовать. Например, OrdersVM
достает из контейнера совершенно конкретный OrdersProvider
, а не какой-нибудь протокол IOrdersProvider
.
С практической точки зрения это затрудняет подмену одной реализации IOrdersProvider
на другую реализацию этого протокола. Между тем, такая подмена может вам пригодиться не только в разработке, но и в рамках рефакторинга, а также при написании юнит-тестов.
Полноценные DI-контейнеры, конечно, лишены всех этих недостатков. Более того, они предлагают нам массу дополнительных возможностей. Лишаясь всего этого, что же вы получаете взамен? Взамен вы получаете простую, легкую, надежную и предсказуемую как выборы президента реализацию, которая либо работает корректно, либо не компилируется.
Например, при резолве из контейнера вы всегда получаете готовую сущность, а не какой-нибудь опциональный тип. При резолве из контейнера не нужно обрабатывать исключения, потому что исключения исключены, они никогда не происходят.
Добавление новых зависимостей в существующий класс выглядит максимально лаконично и сводится к извлечению их из контейнера. Если вы пытаетесь извлечь из контейнера что-то неизвлекаемое, ваш код не скомпилируется. При резолве с аргументами невозможно передать аргументы неверного типа либо забыть передать аргументы: некорректный код не скомпилируется.
И, наконец, очень сложно забыть зарегистрировать какую-то сущность, потому что в контейнере не нужно ничего регистрировать. Многое из перечисленного для большинства «промышленных» DI-контейнеров, к сожалению, недоступно.
Вот вам смысл этого многословного раздела в виде двух списков.
Короче, минусы
- Зависимости достаем в конструкторе прямо из контейнера (Service Locator).
- Не получится закрыть зависимость протоколом (принцип на букву D).
Короче, плюсы
- Простая и лаконичная реализация (50 строк кода).
- Не надо регистрировать зависимости (вообще не надо).
- Извлечение из контейнера никогда не сломается (совсем никогда).
- Нельзя передать невалидные аргументы (не скомпилируется).
Если упомянутые минусы для вашего проекта не критичны, а плюсы вызывают неконтролируемый выброс дофамина — добро пожаловать на борт, нам, скорее всего, по пути.
One More Thing: автоматическое внедрение зависимостей через обертки свойств
В 2019 году в компании Apple придумали инкапсулировать повторяющуюся логику гетеров и сетеров в переиспользуемые атрибуты и назвали это обертками свойств (property wrappers). С помощью таких оберток ваши свойства волшебным образом могут получить новое поведение: запись значения в Keychain
или UserDefaults
, потокобезопасность, валидацию, логирование — да много чего.
Можно найти много статей о том, как сделать внедрение зависимостей с помощью оберток свойств, и это довольно весело, поэтому мы проделаем такой фокус прямо сейчас. Следите за руками.
Чтобы написать свою обертку свойства в минимальной комплектации, нужно создать класс или структуру, предоставить свойство wrappedValue
и пометить все это дело атрибутом @propertyWrapper
:
@propertyWrapper
struct Resolvable<T: IResolvable> where T.Arguments == Void {
private var cache: T?
var wrappedValue: T {
mutating get {
if let cache = cache {
return cache
}
let resolved: T = ContainerHolder.container.resolve()
cache = resolved
return resolved
}
}
}
Из этого незамысловатого кода мы видим, что наш property wrapper называется Resolvable
. Он работает со всеми типами Т
, которые реализуют одноименный протокол и не требуют аргументов при инициализации.
Волшебство происходит при обращении к свойству wrappedValue
: мы возвращаем закэшированное значение, если таковое имеется. Если нет — достаем это значение из контейнера и сохраняем в кэш. Чтобы наша обертка получила доступ к контейнеру, пришлось провернуть грязный трюк — поместить контейнер в статическое свойство класса ContainerHolder
:
final class ContainerHolder {
static var container: IContainer!
}
Имея в своем арсенале обертку Resolvable<T>
, мы можем применить ее к какой-нибудь зависимости, например к ordersProvider
:
@Resolvable
private var ordersProvider: OrdersProvider
Это приведет к тому, что компилятор сгенерирует за нас примерно такой код:
private var _ordersProvider = Resolvable<OrdersProvider>()
var ordersProvider: OrdersProvider {
get { return _ordersProvider. wrappedValue }
}
Видно, что компилятор сгенерировал свойство ordersProvider
, при обращении к которому на самом деле используется обертка, которая умеет доставать из контейнера нужную зависимость.
Теперь знакомая нам модель представления может позволить себе не извлекать из контейнера OrdersProvider
в инициализаторе, а просто пометить соответствующее свойство атрибутом @Resolvable
. Вот так:
final class OrdersVM: IPerRequest {
struct Args {
let customerId: Int
let date: Date
}
@Resolvable
private var ordersProvider: OrdersProvider
private let args: Args
required init(container: IContainer, args: Args) {
self.args = args
}
func loadOrders() {
ordersProvider.loadOrders(for: args.customerId, date: args.date)
}
}
Самое время собрать все вместе и порадоваться, что все работает как прежде:
ContainerHolder.container = Container()
let viewModel: OrdersVM = ContainerHolder. container.resolve(
args: .init(customerId: 42, date: Date()))
viewModel.loadOrders()
Для справки. Этот код производит следующий консольный вывод:
Loading orders for customer '42', date '2020-04-23 18:47:36 +0000'
Unit-тесты, раздел под звездочкой
Думаю, все согласятся, что сложно переоценить важность автоматических тестов в современной разработке. Искренне надеюсь, что вы на постоянной основе используете как минимум unit-тесты и в своих ежедневных рабочих задачах, и в домашних проектах. Лично я — нет. Может быть, по этой причине DI-контейнер из этой статьи не очень хорошо подходит для интеграции с unit-тестами. Однако, если вы, будучи в здравом уме и твердой памяти, решили пойти тернистым путем автоматизации, у меня есть для вас пара вариантов.
Чтобы немного разогреться, начнем с первого варианта, который попроще. Допустим, для нужд тестирования мы хотим замокать OrdersProvider
, чтобы он не лез в сеть, а отдавал тестовые данные. Для начала закроем его протоколом:
protocol IOrdersProvider {
func loadOrders(for customerId: Int, date: Date)
}
extension OrdersProvider: IOrdersProvider {}
Теперь во вью-модели можем сделать второй инициализатор, который будет принимать этот протокол:
final class OrdersVM: IPerRequest {
struct Args {
let customerId: Int
let date: Date
}
private let ordersProvider: IOrdersProvider
private let args: Args
required convenience init(container: IContainer, args: Args) {
self.init(
ordersProvider: container.resolve() as OrdersProvider,
args: args)
}
init(ordersProvider: IOrdersProvider, args: Args) {
self.args = args
self.ordersProvider = ordersProvider
}
func loadOrders() {
ordersProvider.loadOrders(for: args.customerId, date: args.date)
}
}
Такой подход позволяет в реальном приложении создавать сущности через контейнер, используя required init, а в тестах пользоваться вторым инициализатором и создавать сущности с замоканными зависимостями.
Однако граф зависимостей может быть довольно запутан, и чаще всего удобно продолжить использование контейнера даже в тестах, но при этом научиться подменять некоторые зависимости на моковые. Это плавно подводит нас ко второму, более интересному варианту.
Забегая вперед, скажу, что далее от нас потребуется хранить объекты IResolvable
в некоторой коллекции. Однако если мы попробуем сделать это, то столкнемся с суровой действительностью в виде ошибки, до боли знакомой каждому iOS-разработчику: protocol ‘IResolvable’ can only be used as a generic constraint because it has Self or associated type requirements. Типичный способ как-то справиться с этой ситуацией — налить себе чего-нибудь покрепче и применить механизм с пугающим названием «стирание типов» (type erasure).
Стирание типов предполагает, что вместо неполноценного протокола IResolvable
мы будем использовать самую обычную структуру AnyResolvable
, не обремененную ассоциированным типом. Такую структуру можно спокойно хранить в массиве, но она, конечно, лишена полезной функциональности IResolvable
. Последнее мы компенсируем с помощью замыкания. Внимание на код:
struct AnyResolvable {
private let factory: (IContainer, Any) -> Any?
init<T: IResolvable>(resolvable: T.Type) {
self.factory = { container, args in
guard let args = args as? T.Arguments else { return nil }
return T(container: container, args: args)
}
}
func resolve(container: IContainer, args: Any) -> Any? {
return factory(container, args)
}
}
Кода здесь немного, но он хитрый. В инициализатор мы принимаем настоящий живой тип T, который не можем никуда сохранить. Вместо этого мы сохраняем замыкание, обученное создавать экземпляры этого типа. Замыкание впоследствии используется по своему прямому назначению в методе resolve(container:args:)
, который понадобится нам позже.
Вооружившись AnyResolvable
, мы можем написать контейнер для unit-тестов в 20 строк, который позволит нам выборочно мокать часть зависимостей. Вот он:
final class ContainerMock: Container {
private var substitutions: [ObjectIdentifier: AnyResolvable] = [:]
public func replace<Type: IResolvable, SubstitutionType: IResolvable>(
_ type: Type.Type, with substitution: SubstitutionType.Type) {
let key = ObjectIdentifier(type)
substitutions[key] = AnyResolvable(resolvable: substitution)
}
override func makeInstance<T: IResolvable>(args: T.Arguments) -> T {
return makeSubstitution(args: args) ?? super.makeInstance(args: args)
}
private func makeSubstitution<T: IResolvable>(args: T.Arguments) -> T? {
let key = ObjectIdentifier(T.self)
let substitution = substitutions[key]
let instance = substitution?.resolve(container: self, args: args)
return instance as? T
}
}
Давайте разбираться.
Класс ContainerMock
наследуется от обычного Container
, переопределяя метод makeInstance(args:)
, используемый контейнером для создания сущностей. Новая реализация пытается создать подставную зависимость вместо настоящей. Если ей это не удается, она печально разводит руками и фолбечится на реализацию базового класса.
Метод replace(_:with:)
позволяет сконфигурировать моковый контейнер, указав тип зависимости и соответствующий ей тип мока. Эта информация хранится в словаре substitutions
, который использует уже знакомый нам ObjectIdentifier
для ключа и AnyResolvable
для хранения типа мока.
Для создания моков используется метод makeInstance(args:)
, который по ключу пытается достать нужный AnyResolvable
из словаря substitutions и создать соответствующий экземпляр с помощью метода resolve(container:args:)
.
Использовать все это дело мы будем следующим образом. Создаем моковый OrdersProvider
, переопределяя метод loadOrders(for:date:)
:
final class OrdersProviderMock: OrdersProvider {
override func loadOrders(for customerId: Int, date: Date) {
print("Loading mock orders for customer '\(customerId)', date '\(date)'")
}
}
Создаем моковый контейнер и конфигурируем его. Вью-модель достаем из контейнера обычным образом. Контейнер создает экземпляр вью-модели, разрешая все ее зависимости с учетом подстановок:
let container = ContainerMock()
container.replace(OrdersProvider.self, with: OrdersProviderMock.self)
let viewModel: OrdersVM = container.resolve(args: .init(customerId: 42, date: Date()))
viewModel.loadOrders()
Для справки, этот код производит следующий консольный вывод:
Loading mock orders for customer '42', date '2020-04-24 17:47:40 +0000'
Заключение
Сегодня мы вероломно поступились принципом инверсии зависимостей и в очередной раз изобрели велосипед, реализовав бюджетный DI с помощью анти-паттерна Service Locator. Попутно мы познакомились с парой полезных техник iOS-разработки, таких как type erasure и property wrappers, и не забыли про unit-тесты.
Автор не рекомендует использовать код из этой статьи в приложении для управления ядерным реактором, но если у вас небольшой проект и вы не боитесь экспериментировать — свайп вправо, it’s a match <3
Весь код из этой статьи можно скачать в виде Swift Playground.
Тиньков совершил фейковый каминг-аут
Бизнесмен взбудоражил интернет шуточным признанием в нетрадиционной ориентации
Председатель Совета директоров «Тинькофф Кредитные Системы» Олег Тиньков признался в гомосексуальности вслед за главой Apple Тимом Куком. Бизнесмен написал в Twitter: «ОК, теперь моя очередь сделать каминг-аут, после моего друга Тима. Я ГЕЙ, и я горжусь этим».
Банкир также разместил фотографию, где рядом с ним находится директор велокоманды Saxo-Tinkoff Стефано Фельтрин.
Представитель банка назвала признание Тинькова шуткой. «Вы читали его твиттер? Он там постоянно шутит и троллит людей», — сказала «Русской службе новостей».PR-директор ТКС Дарья Ермолина. Отметим, что банкир женат и имеет троих детей.
Предприниматель ищет «своего Джонатана Айва»
Российский предприниматель, совладелец банка «Тинькофф кредитные системы» (ТКС) Олег Тиньков усомнился в прозрачности российского рекламного рынка. По его мнению, в рекламе есть коррупция и всей индустрии еще предстоит чистка, передает RNS.
Олег Тиньков объявил конкурс на креативную идею для рекламы, которая долждна выйти в марте следующего года. Победителю обещан приз в размере 150 тысяч долларов.
Бизнесмен в качестве благодарности за работу подарил 4% TCS Group
Американский технологический гигант Google совершил свое крупнейшее приобретение в Европе ― компания получила контроль над британским стартапом DeepMind, заплатив за это, по неофициальным данным, 500 млн долл.
Самоуверенность сыграла злую шутку с бизнесменом Олегом Тиньковым. 5 марта в своем твиттере он объявил о том, что намерен запустить Tinkoff Airlines. «Аэрофлот, Трансаэро и S7 — это не то. Будем переворачивать рынок…» — написал тогда он. Казалось бы, такой продвинутый интернет-пользователь, как Олег Тиньков, который первый запустил в России полностью дистанционный банк, должен был заранее позаботиться о доменных именах для своего нового проекта.
Предприниматель Олег Тиньков намерен инвестировать от 10 млн до 20 млн долл. в компании, работающие на рынке интернет-рекламы.Создаваемую им структуру возглавит один из создателей, ныне миноритарный акционер видеопортала ivi.ru Анна Знаменская.
|
|
Тим Кук и еще девять открытых геев-бизнесменов. Фото | Новости
Тим Кук
CEO Apple
Автор американского Forbes Тим Уорстэлл в мае 2014 года сообщал, что Кук является открытым гомосексуалистом. А в конце октября Кук призвал власти своего родного штата Алабама приложить больше усилий по защите прав ЛГБТ-сообщества. В 2013 году он в колонке для газеты The Wall Street Journal призвал конгресс США принять закон, запрещающий дискриминацию при трудоустройстве. В ней он рассказывал, что гомосексуальность дала ему понимание о том, с каким вызовами каждый день сталкиваются принадлежащие к меньшинству люди. «Это также предоставило мне кожу носорога, иметь которую полезно, если вы генеральный директор Apple», — заметил он.
Ориентация не влияла на отношение к нему коллег из Apple, многие из которых знали о ней. «Конечно, я имею счастье работать в компании, которая любит творчество и инновации и знает, что может только процветать, признавая различия людей. Не всем так везет», — написал он.
Следующий слайд
Питер Тиль
Инвестор
Сооснователь PayPal и первый профессиональный инвестор в Facebook, Питер Тиль является и владельцем технологического стартапа Palantir (оценивается в $1 млрд). 46-летний Тиль финансирует ЛГБТ-группу GOProud. О своей ориентации он рассказал только в 2003 году, когда ему было 35 лет.
Следующий слайд
Лорд Джон Браун
Экс-глава British Petroleum
В ВР Браун отработал 41 год. При нем компания приняла политику равноправия по отношению к представителям сексуальных меньшинств. В июле 2014 года в интервью немецкому изданию Die Welt Браун призвал европейские компании направлять больше сотрудников-геев в Россию. По словам Брауна, в некоторых областях геи «показывают даже лучшие результаты, нежели обычные сотрудники, поскольку они работают намного напряженнее и постоянно что-либо доказывают себе».
Следующий слайд
Крис Хьюз
Инвестор, один из основателей Facebook
В 2004 году во время учебы в Гарварде Крис Хьюз совместно с Марком Цукербергом, Дастином Московицем и Эдуардо Саверином основал социальную сеть Facebook. В 2007 году он покинул соцсеть, чтобы принять участие в предвыборной кампании Барака Обамы. Хьюз занимался разработкой сайта Барака Обамы. В январе 2011 года в Нью-Йорке на приёме в поддержку брачного равноправия Крис и его партнер объявили о помолвке.
Следующий слайд
Антонио Симос
Глава банковского подразделения HSBC в Великобритании
Симос – один из руководителей HSBC в Великобритании, ему подчиняются около 50 000 человек. В 2013 году получил премию как человек года от влиятельной международной ЛГБТ-организации OUTstanding. Симос ведет активную кампанию в качестве представителя сексуальных меньшинств. Например, дал серию интервью, каково быть открытым геем в банковском бизнесе. Бывший глава BP Джон Браун назвал Симоса примером для подражания в своей книге «Стеклянный чулан» (‘The Glass Closet’).
Следующий слайд
Кристофер Бэйли
Главный креативный и исполнительный директор в Burberry
В подчинении Кристофера Бэйли, который руководит работой британского бренда по всему миру – более 11 000 сотрудников. Он начал работать в Burberry в качестве директора по дизайну и довольно быстро сделал карьеру. В 2013 году получил награду «Лучший мужской дизайнер года» на British Fashion Awards, и был выбран дизайнером года на GQ Men of the Year Awards в 2014 году.
Следующий слайд
Пол Рид
Исполнительный директор в BP Integrated Supply and Trading
Рид с 2009 года является участником сообщества BP Pride, объединяющей ЛГБТ-сотрудников компании.
Следующий слайд
Пьер Лэнди
Заместитель генерального советника в Yahoo
Отвечает за деятельность компании в Европе, на Ближнем Востоке и в Африке. Спонсирует по всему миру инициативы сотрудников с нетрадиционной сексуальной ориентацией.
Следующий слайд
Алекс Шульц
Вице-президент по развитию Facebook
В подчинении Шульца – более 100 человек, в том числе половина команды аналитиков соцсети, все маркетологи, и отдел международного развития, который занимается локализацией сервиса. Шульц регулярно рассказывает на конференциях о своем «камингауте» и о том, что хорошего и плохого в том, чтобы быть открытым геем в бизнесе.
Следующий слайд
Энтони Уотсон
Управляющий директор, руководитель информационного департамента Barclay`s
38-летний Этони Уотсон является влиятельным членом нескольких международных ЛГБТ-организаций, среди которых – американская адвокатская группа GLAAD, благотворительные и образовательные Stonewall и Diversity Role Models, которые занимаются защитой прав представителей нетрадиционных меньшинств. Регулярно дает интервью ведущим изданиям о том, что значит быть геем в бизнесе и что делать тем, кто еще открыто не заявил о своей сексуальной ориентации.
Следующий слайд
CyclingQuotes.
com Тинькофф-Саксо полон оптимизма после третьего дня в Британии
На третьем этапе Тура Британии было решено еще одно решение в спринте, и Элиа Вивиани одержала победу. Майкл Мёрков из «Тинькофф-Саксо» упустил первые позиции, заняв 16-е место на сцене, в то время как директор по командным видам спорта Ники Соренсен заметил явные признаки улучшения благодаря хорошей поддержке команды.
После завершения третьего этапа Тура Британии Ники Соренсен говорит, что команда показала хорошие результаты.
«Я думаю, что ребята сегодня хорошо выступили. Хотя Мёркёв упустил лучший результат в финальном спринте, команда его здорово поддержала, и я определенно заметил некоторые улучшения в их манере езды сегодня. С такими лучшими спринтерами, как Вивиани, Грайпель и Кавендиш, определенно нелегко бороться за первые места на этапе. В конце концов Мёркёв был там, но все получилось не так, как мы могли надеяться », — говорит Ники Соренсен о гонке на 216-километровом этапе от Кокермаута до Замка Флорс, выигранном Элиа Вивиани.
Тинькофф-Саксо финишировал четырьмя парнями в уничтоженной основной группе, состоящей всего из 50 гонщиков. Пелотон держал высокий темп, а команды спринтеров контролировали отрыв.
«У нас был ранний отрыв шести гонщиков, при этом один из них отставал только примерно на 1:30» в GC. Это означало, что у перерыва действительно не было шансов, так как спринтеры были нацелены на эту сцену, а лучшие команды GC не хотели их отпускать », — говорит Ники Соренсен, прежде чем подробно рассказать о завтрашнем движении от Эдинбурга до Блита.
«Завтра, скорее всего, будет день для спринтеров, где они сойдутся лицом к лицу в финальном групповом спринте за победу. Мы знаем, что Мёркёв быстр, и Трусов тоже. Они, естественно, встретятся с некоторыми большими фаворитами, но теперь мы сядем и посмотрим, как мы можем подойти к сцене наилучшим образом. На следующий день мы встретимся на сцене королевы с финишем на вершине горы. На мой взгляд, Крис Анкер идет хорошо, и я считаю, что то же самое можно сказать и о Кисерловски », — завершает Ники Соренсен.
Эдоардо Зардини идет впереди …
Эдоардо Зардини (Bardiani CSF) штурмом одержал победу на The Tumble и вырвался в абсолютное лидерство Тура Британии на третьем этапе.
Зардини атаковал в самом начале подъема, а затем на последних нескольких километрах оторвался от Николаса Роша (Тинькофф-Саксо) и соло к победе.
Еще дальше Михал Квятковски (Omega Pharma-Quickstep) сильно ударил в конце культового подъема и занял второе место, а занявший пятое место сэр Брэдли Виггинс (Team Sky) также повысил свои амбиции по защите титула, который он впервые выиграл в прошлом году.
Эдоардо Зардини празднует свою победу на The Tumble — победа, которая помещает его в общую желтую майку (фото: Саймон Уилкинсон / SWpix.com)
Детали этапа
Отрыв сформировался в самом начале этапа, в пределах первых десяти километров, чтобы преодолеть первый категоризованный подъем дня впереди пелотона.
Марк МакНалли («Цепная реакция»), участвующий в гонке в майке «Король гор», закрепил свое лидерство, приняв участие в раннем движении из шести человек, в котором также были представлены национальные команды Великобритании.
Чемпион серии
Elite Road Series Янто Баркер (Raleigh-GAC), Том Стюарт (Madison-Genesis) и Майк Куминг (Rapha Condor JLT) — все разделились, а Мануэле Боаро (Тинькофф-Саксо) и Себастьян Лендер (BMC Racing) завершили борьбу. Движение.
Боаро, который до сих пор предпринял несколько неудачных попыток ускользнуть от внимания публики в гонке этого года, наслаждался своим временем на дороге, опередив шестерку на первом подъеме, а МакНелли последовал за ним на втором.
Он сделал то же самое на восхождении третьей категории в Найтоне, за ним снова последовал МакНелли с пелотоном, возглавляемым Team Sky и Omega Pharma-Quickstep, гарантируя, что их лидерство никогда не выросло до такой степени, которая могла бы считаться неуправляемой.
Garmin-Sharp также добавил огневую мощь в погоню, которая удерживала разрыв от двух до трех минут на протяжении всего этапа.
Впереди Куминг сделал ход первым — после того, как Лендер провел шестерку через вторую промежуточную точку спринта.
Рафа Кондор из JLT ускорился, чтобы вывести небольшое преимущество, когда Стюарт и Боаро погнались за ним.
Темп оказался непосильным для Баркера, Макнелли и Лендера, которые вскоре сели и вернулись к группе, в которой Марк Кавендиш был одним из лидеров гонщиков.
Тем не менее, Куминг, которого поймали Стюарт и Боаро, продолжал хорошо работать, пытаясь сохранить свое преимущество.
Поскольку дороги становились все более и более неровными по мере приближения к The Tumble, их отрыв продолжал падать, пока Боаро не разогнался на последних 20 километрах.
Итальянец восстановил свое преимущество до более чем минуты: Омега Фарма-Квикстеп, Гармин-Шарп и Team Sky продолжали преследовать — Марк Реншоу в желтой майке, все еще в колесах своих товарищей по команде впереди. .
К тому времени, когда они достигли нижних пандусов The Tumble, он, однако, был отброшен назад, когда люди GC жестко выехали на позицию на подходе к «Iron Mountain».
Зардини был одним из первых атаковавших гонщиков, к которому присоединился Джек Бауэр (Garmin-Sharp), в то время как гонщики, включая Реншоу, быстро вылетели из спины.
Бауэр проиграл испытание, потеряв колесо Зардини, поскольку итальянец в одиночку продолжал гонку.
Сэр Брэдли Уиггинс (Team Sky) возглавил погоню, хотя он, казалось, постепенно угасал по мере того, как проходили километры, в то время как Зардини продолжал создавать брешь в группе.
Следующим ответил Роше, с очевидной легкостью догнав и обогнав итальянца, а Зардини слегка приподнялся, довольный тем, что ирландец открыл собственное преимущество.
Однако, когда Роше оглянулся через плечо, Зардини снова ударил ногой — быстро сократив расстояние в нескольких метрах между ними и снова попав вперед.
На последних двух километрах Рош исчез, позволив Зардини вырваться наружу, когда он включил средний десятипроцентный уклон.
Позади, погоня продолжалась стремительно — впереди Квятковски и возродившийся Виггинс во главе с товарищем по команде Дэвидом Лопесом, но Зардини не удалось остановить.
Взгляд через плечо подтвердил, что у него значительный разрыв, и итальянец успел застегнуть майку, вскинуть руки вверх и свободно пересечь финишную черту, чтобы отпраздновать свою вторую победу в сезоне.
Еще дальше Квятковски перешел на Рош и обошел его мощным финальным ударом, чтобы повысить его собственные общие амбиции, в то время как Виггинс финишировал пятым — сразу после Дилана Тьюнса (BMC Racing).
Это оставляет GC широко открытым, с Зардини впереди, но гонка на время в Уайтхолле, Лондон, вероятно, окажется решающей, поскольку Виггинс и Квятковки все еще находятся в охоте.
Tour of Britain 2014: третий этап — результат
1) Эдоардо Зардини (Италия) — Бардиани-CSF — 4.35.02 часа
2) Михал Квятковски (Польша) — Омега Фарма-Квикстеп +9 ”
3) Николас Рош (IRL) — Тинькофф-Саксо +11”
4) Дилан Теунс (BEL) — BMC Racing — ST
5) Сэр Брэдли Уиггинс (GBR) — Team Sky +14 ”
6) Джованни Висконти (Италия) — Movistar — ST
7) Дэвид Лопес (ESP) — Team Sky — ST
8) Себастьян Райхенбах (SUI) — IAM Cycling +16 ”
9) Ион Изагирре (ESP) — Movistar — ST
10) Леопольд Кениг (Чехия) — Team NetApp-Endura
Общая классификация
1) Эдоардо Зардини (Италия) — Бардиани-CSF — 11. 30.21 часов
2) Михал Квятковски (Польша) — Omega Pharma-Quickstep +13 ”
3) Николас Рош (IRL) — Тинькофф-Саксо +17”
4) Дилан Теунс (Белоруссия) — BMC Racing +21 ”
5) Сэр Брэдли Уиггинс (Великобритания) — Team Sky +24 ”
6) Дэвид Лопес (ESP) — Team Sky — ST
7) Ион Изагирре (ESP) — Movistar +26”
8) Леопольд Кениг (CZE) — Team NetApp- Endura
9) Себастьян Райхенбах (SUI) — IAM Cycling
10) Джованни Висконти (Италия) — Movistar +37 ”
Tour of Britain: Эдоардо Зардини лидирует с победой на третьем этапе, а Брэдли Уиггинс финиширует пятым | Новости велоспорта
Мэтт Вестби
Последнее обновление: 10.09.14, 10:18
Эдоардо Зардини оторвался от удара 1.3км от финиша
Эдоардо Зардини из Италии вышел в лидеры Турне Британии после победы на финише на высшем уровне на третьем этапе в игре The Tumble соло, когда сэр Брэдли Виггинс оправился от падения и занял пятое место.
Зардини изначально участвовал в атаке из трех человек в конце финального подъема, но позже перешел в соло-лидерство со вторым ускорением на 1,3 км, и его не удалось поймать.
Гонщик Bardiani-CSF пересек залитую солнцем финишную черту в Южном Уэльсе на девять секунд впереди занявшего второе место Михала Квятковски и на 11 секунд впереди занявшего третье место Николя Роша.
Виггинс был исключен из основной группы преследования чуть менее чем в 2 км от финиша, но товарищ по команде Team Sky Дэвид Лопес в конце концов пересек финишную черту на 14 секунд ниже победителя.
Набрав десять дополнительных секунд для своей победы, Зардини теперь открывает 13-секундное преимущество над Квятковски, занявшим второе место, с отставанием на 17 секунд на третьем и Уиггинс на 24 секунды на пятом.
«Я просто прошелся по нему»
Виггинс сказал: «Я не обратил на них [нападавших] никакого внимания.Я знал восхождение, и я знал, что он вернется ко всем в конце, как вы видели — Роше и это действительно умерло. Я проходил это восхождение несколько раз и знал, что это сложно, поэтому я просто прошел его от А до Б.
«Это все, ради чего нужно играть. Гонка на время [на этапе 8а] составляет 8 км, что похоже на трасса преследования, которая предпочтет меня по сравнению с другими гонщиками. Квятковски — хороший тайм-триаллист — она будет напряженной. Пока она будет стоять в таком состоянии, у нас будут хорошие шансы.»
На 179,9-километровом этапе гонщики совершили три подъёма по категориям в начале дня, прежде чем закончиться единственным финишом на вершине гонки в этом году, крутым подъёмом первой категории протяжённостью 4,1 км.
Отрыв из шести человек в составе Марка МакНалли (Пост-цепная реакция), Томаса Стюарта (Мэдисон Генезис), Себастьяна Ландера (BMC Racing), Майкла Куминга (Рафа Кондор, JLT), Янто Баркера (Роли) и Мануэле Боаро (Тинькофф-Саксо). чтобы отойти в сторону и создать разрыв почти в три минуты, но они не смогли удержать преследующий пелотон, и последний из них был пойман с 6. Осталось 9 км.
Сэр Брэдли Виггинс (слева) пересек финишную черту на 14 секунд ниже победителя на пятом месте
Тинькофф-Саксо затем повел основную группу вверх по склонам к Тамбл, но как только подъем начался, Джек Бауэр (Garmin- Шарп) вырвался из стаи, за ними последовали Зардини и Крис Юул-Йенсен (Тинькофф-Саксо).
Уиггинс отступает. то, что осталось от преследующей стаи, а Виггинс оказался брошенным во второй группе.
Зардини сумел вернуться к утомляющему Роше, и, почувствовав, что он уязвим, итальянец атаковал и мгновенно открыл достаточно большой разрыв, чтобы гарантировать ему вторую победу в сезоне.
Виггинс тем временем получил помощь от товарища по команде Лопеса, который был в первой группе погони, но не спешил ждать своего лидера, и действующий чемпион впоследствии хорошо сплотился, чтобы уменьшить свои потери и твердо занять место в общем зачете.
Зардини сказал позже: «Я знал, что это восхождение имеет репутацию, возможно, лучшего в Британии, и оно оправдало свою репутацию. Это было очень сложно, но для меня сегодня это было прекрасное восхождение.
« Я никогда не был в беде, когда ко мне подошел Николас.После атаки я стал наращивать свои усилия, потому что знал, что еще нужно сделать. Я позволил ему пройти, и, возможно, я пошутил, что немного устал, но на самом деле я все время чувствовал себя прекрасно и вскоре решил вернуться в атаку. Я чувствовал себя фантастически и смог насладиться моментом и всей поддержкой болельщиков наверху ».
Результат третьего этапа
1 Эдоардо Зардини (Италия) Бардиани-CSF, 4:35:02
2 Михал Квятковски (Pol) Omega Pharma — Quick-Step, +9
3 Nicolas Roche (Ire) Tinkoff-Saxo, +11
4 Dylan Teuns (Bel) BMC, +14
5 Sir Bradley Wiggins (GB) Team Sky, то же время
6 Giovanni Visconti (Ita) Movistar, st
7 David Lopez (Spa) Team Sky, st
8 Sebastien Reichenbach (Swi) IAM Cycling, +16
9 Ion Izagirre (Spa) Movistar, st
10 Леопольд Кениг (Чехия) NetApp -Endura, st
Общая классификация
1 Эдоардо Зардини (Италия) Бардиани-CSF, 11:30:21
2 Михал Квятковски (Польша) Omega Pharma — Quick-Step, +13
3 Николя Рош (Ирландия) Tinkoff-Saxo, +17
4 Dylan Teuns (Bel) BMC, +21
5 Sir Bradley Wiggins (GB) Team Sky, +24
6 David Lopez (Spa) Team Sky, то же время
7 Ion Izagirre (Spa) Movi star, +26
8 Леопольд Кениг (Чехия) NetApp-Endura, st
9 Sebastien Reichenbach (Swi) IAM Cycling, st
10 Giovanni Visconti (Ita) Movistar, +37
1 | 13 | +7: 07 | 36 | HOWES AlexGarmin Sharp | 26 | Garmin Sharp | 20 | 30 2 | |||||||||||||||||||
2 | 45 | +42: 51 | 77 | REIJNEN KielUnitedHealthcare Pro Cycling Team | 28 | UnitedHealthcare Pro Cycling Team | 14 9 | ||||||||||||||||||||
3 | 21 | +15: 48 | 6 | SCHÄR MichaelBMC Racing Team | 27 | BMC Racing Team | 8 | 12 | ,, 0:00 4 | 3 | +1: 45 | 141 | ȚVETCOV SergheiJelly Belly p / b Maxxis | 25 | Jelly Belly p / b Maxxis | 7 | 7 | ,, 0:00 | |||||||||
5 | 4 | +1: 49 | 11 | MAJKA RafałTinkoff — Saxo | 24 | Tinkoff — Saxo | 6 | 9208 9 | 6 | 1 | +0: 00 | 1 | VAN GARDEREN TejayBMC Racing Team | 26 | BMC Racing Team | 5 | 3 | ,, 0:00 9208 7 | 48 | +46: 37 | 123 | ANTHONY JesseOptum p / b Kelly Benefit Strategies | 29 | Optum p / b Kelly Benefit Strategies | 4 | 2 | 9208 9018:00 |
8 | 22 | +16: 50 | 2 | BOOKWALTER BrentBMC Racing Team | 30 | BMC Racing Team | 2 | 1 | ,, 89 0:00 | ,, 89 0:00 | 188 9 | 19 | +14: 02 | 32 | ACEVEDO JanierGarmin Sharp | 28 | Garmin Sharp | ,, 0:00 | 10 43 | 121 | JONES CarterOptum p / b Kelly Benefit Strategies | 25 | Optum p / b Kelly Benefit Strategies | ,, 0:00 | |||
11 | 25 | DIDIER LaurentTrek Factory Racing | 30 | Trek Factory Racing | « 0:00 | ||||||||||||||||||||||
12 | 12 | Группа разработчиков | 22 | Группа разработчиков Bissell | ,, 0:00 | ||||||||||||||||||||||
13 | 33 | +27: 26 | 81 | MEGÍAS JavierTeam Ново Нордиск | 30 | Команда Ново Нордиск | ,, 0:00 | ||||||||||||||||||||
14 | 10 | +5: 35 | 17 | Тинькофф — Saxo | ,, 0:00 | ||||||||||||||||||||||
15 | 17 | +9: 26 | 22 | SCHLECK FränkTrek 9018 9018 Factory Racing | « 0:00 | ||||||||||||||||||||||
16 | 2 | +1: 32 | 31 | DANIELSON TomGarmin Sharp | 36 | Garmin Sharp | « | ||||||||||||||||||||
17 | 68 | +59: 48 | 78 | SUMMERHILL DanielUnitedHealthcare Pro Cycling Team | 25 | UnitedHealthcare Pro Cycling Team | « 0:00 | ||||||||||||||||||||
18 | 6 | +3: 31 | 101 | ROSSKOPF JoeyHincapie Sportswear Development Team | 24 | Hincapie 9018 Sportswear Team Development39 0:00 | |||||||||||||||||||||
19 | 7 | +3: 35 | 53 | HUZARSKI BartoszTeam NetApp — Endura | 33 | Team NetApp — Endura | :00 | ||||||||||||||||||||
20 | 18 | +10: 01 | 158 | Команда разработчиков ZEPUNTKE RubenBissell | 21 | Команда разработчиков Bissell | ,, 0:00 | 154 | Команда разработчиков EATON DanielBissell | 21 | Группа разработчиков Bissell | ,, 0: 0 0 | |||||||||||||||
22 | 5 | +3: 11 | 23 | BUSCHE MatthewTrek Factory Racing | 29 | Trek Factory Racing | ,, 89 0:00 | 11 | +5: 51 | 95 | KYER JulianTeam SmartStop | 26 | Команда SmartStop | ,, 0:00 | |||||||||||||
24 | 41 + 57 | MÜHLBERGER GregorTeam NetApp — Endura | 20 | Team NetApp — Endura | ,, 0:00 | ||||||||||||||||||||||
25 | 52 | Велоспорт | 31 | Drapac Professional Cycling | ,, 0:00 | ||||||||||||||||||||||
26 | 20 | +14: 35 | ЯРАМИЛЛО Даниэль Джамис — Хагенс Берман | 23 | Джамис — Хагенс Берман | « 0:00 | |||||||||||||||||||||
27 | 30 | RR — Hagens Berman | 24 | Jamis — Hagens Berman | ,, 0:00 | ||||||||||||||||||||||
28 | 9 | +3: 44 | 5 | HERMANS Racing Team | HERMANS BenB9 | BMC Racing Team | ,, 0:00 | ||||||||||||||||||||
29 | 59 | +55: 50 | 135 | JACQUES-MAYNES BenjaminJamis — Hagens Berman8 35-189 | ,, 0:00 | ||||||||||||||||||||||
30 | 42 | +40: 49 | 54 | KONRAD PatrickTeam NetApp — Endura | 22 | Команда NetApp — Endura | « 0:00 | ||||||||||||||||||||
31 | 54 | +54: 11 | 98 | TORCKLER MichaelTeam SmartStop | 27 | Team 0:00 | |||||||||||||||||||||
32 | 31 | +26: 41 | 55 | MACHADO TiagoTeam NetApp — Endura | 28 | Team NetApp — Endura | :00 | ||||||||||||||||||||
33 | 23 | +19: 36 | 7 | STETINA PeterBMC Racing Team | 27 | BMC Racing Team | ,, 0:00 | 9018 9018 9018 9018 9018 | +23: 20 | 21 | VOIGT JensTrek Factory Racing | 42 | Trek Factory Racing | ,, 0:00 | |||||||||||||
35 | +20: 39 | 52 | DE LA CRUZ DavidTeam NetApp — Endura | 25 | Team NetApp — Endura | 0:14 0:14 | |||||||||||||||||||||
36 | +58: 17 | 142 | BURNETT IanJelly Belly p / b Maxxis | 27 | Jelly Belly p / b Maxxis | ,, 0:14 | 37 7:32 | 18 | POLJAŃSKI PawełTinkoff — Saxo | 24 | Tinkoff — Saxo | ,, 0:14 | |||||||||||||||
38 | 268 BRITTON RobTeam SmartStop | 29 | Team SmartStop | ,, 0:14 | |||||||||||||||||||||||
39 | 15 | +7: 49 | 28 | ZTOIDL | Factory Racing 26 | Trek Factory Racing | ,, 0:14 | ||||||||||||||||||||
40 | 16 | +8: 43 | 71 | EUSER LucasUnitedHealthcare Procare188 Cycling Team | ,, 0:14 | ||||||||||||||||||||||
41 | 32 | +27: 02 | 12 | ROGERS MichaelTinkoff — Saxo | 34 | Tink189 39: Saxo 0:23 | |||||||||||||||||||||
42 | 50 | +49: 39 | 74 | DAY BenjaminUnitedHealthcare Pro Cycling Team | 35 | UnitedHealthcare Pro Cycling Team | 1 | ||||||||||||||||||||
43 | 62 | +58: 08 | 133 | ПРИГОТОВЛЕНИЕ MattJamis — Hagens Berman | 35 | Jamis — Hagens Berman | 1:14 1:14 | ||||||||||||||||||||
44 | 60 | +56: 26 | 33 | DEKKER ThomasGarmin Sharp | 29 | Garmin Sharp | 4 | 08 | |||||||||||||||||||
45 | 85 | +1: 06: 19 | 3 | EIJSSEN YannickBMC Racing Team | 25 | BMC Racing Team | 9208 4:09 46 | 86 | +1: 06: 24 | 43 | КОРОЛЬ ЭдвардКэннондейл | 31 | Каннондейл | ,, 4:08 | |||||||||||||
47 | 76 | ГРОМКО JeffUnitedHealthcare Pro Cycling Team | 36 | UnitedHealthcare Pro Cycling Team | ,, 4:08 | ||||||||||||||||||||||
48 | 95 : 12: 07 | 8 | ZABEL RickBMC Racing Team | 20 | BMC Racing Team | ,, 4:08 | |||||||||||||||||||||
49 | 24 | 37 | 37 | KING BenGarmin Sharp | 25 | Garmin Sharp | ,, 4:08 | ||||||||||||||||||||
50 | 78 | +1: 03: 30 | 153 | Команда разработчиков | Команда разработчиков Bissell | ,, 4:08 | |||||||||||||||||||||
51 | 34 | +28: 49 | 35 | GAIMON PhillipGarmin Sharp | , 4:08 | ||||||||||||||||||||||
52 | 35 | +30: 42 | 122 | ANDERSON RyanOptum p / b Kelly Benefit Strategies | 27 | Optum p / b Kelly Benefit Strategies | ,, 4:08 | ||||||||||||||||||||
53 | 39 | +35: 43 | 14 | GULDHAMMER RasmusTinkoff RasmusTinkoff — Saxo | , 4:08 | ||||||||||||||||||||||
54 | 90 | +1: 09: 15 | 15 | ГАНСЕН ЙесперТинькофф — Саксо | 23 | Тинькофф — Саксо | |||||||||||||||||||||
55 | 66 | +59: 09 | 24 | IRIZAR MarkelTrek Factory Racing | 34 | Trek Factory Racing | ,, 4:08 | +57: 08 | 26 | ROULSTON HaydenTrek Factory Racing | 33 | Trek Factory Racing | ,, 4:08 | ||||||||||||||
57 | 103 | +1: 16: 03 | 63 | KERBY JordanDrapac Professional Cycling | 22 | Drapac Professional Cycling | ,, 4:08 | 58 37:29 | 56 | MENDES JoséTeam NetApp — Endura | 29 | Team NetApp — Endura | ,, 4:08 | ||||||||||||||
59 | 27 | BUTLER Команда разработчиков спортивной одежды ChrisHincapie | 26 | Группа разработчиков спортивной одежды Hincapie | ,, 4:08 | ||||||||||||||||||||||
60ANG | 79 | +1: 039018: 34 | 30 | Cannondale | ,, 4:08 | ||||||||||||||||||||||
61 | 65 | +59: 07 | 38 | MANNION GavinGarmin Sharp | 23 | Garmin Sharp | ,, 4:08 | ||||||||||||||||||||
62 | 81 | +1: 04: 13 | Zotiz Стратегии | 37 | Optum p / b Kelly Benefit Strategies | ,, 4:08 | |||||||||||||||||||||
63 | 38 | +32: 57 | 127 | ZIRBEL Стратегии | 35 | Optum p / b Kelly Benefit Strategies | ,, 4:08 | ||||||||||||||||||||
64 | 64 | +58: 49 | 144 | LEMUS belly | 22 | Jelly Belly p / b Maxxis | ,, 4:08 | ||||||||||||||||||||
65 | 57 | +55: 20 | 126 | SELANDER BjornOptum efit Strategies | 26 | Optum p / b Kelly Benefit Strategies | ,, 4:08 | ||||||||||||||||||||
66 | 82 | +1: 04: 38 | 73 | Команда | 29 | UnitedHealthcare Pro Cycling Team | « 4:08 | ||||||||||||||||||||
67 | 55 | +54: 51 | 136 | MILLER HARSAGENJAMIS Джамис — Хагенс Берман | ,, 4:08 | ||||||||||||||||||||||
68 | 100 | +1: 14: 19 | 91 | KOCJAN JureTeam SmartStop | 29 SmartStop | 29 SmartStop | 29 SmartStop | 29 SmartStop ,, 4:08 | |||||||||||||||||||
69 | 71 | +1: 00: 46 | 92 | BELL ZachTeam SmartStop | 31 | Team SmartSt op | ,, 4:08 | ||||||||||||||||||||
70 | 99 | +1: 14: 10 | 145 | FISHER SteveJelly Belly p / b Maxxis | 24 | Belly J Maxxis | ,, 4:08 | ||||||||||||||||||||
71 | 76 | +1: 02: 42 | 147 | RATHE JacobJelly Belly p / b Maxxis | 23 | ,, 4:08 | |||||||||||||||||||||
72 | 98 | +1: 13: 42 | 137 | ROMERO Luis AlbertoJamis — Хагенс Берман | 35 | ,, 4:08 | |||||||||||||||||||||
73 | 47 | +44: 58 | 13 | БЕЛТРАН Эдуард Тинькофф — Саксо | 24 | Тинькофф — Саксо | |||||||||||||||||||||
96 | +1: 12: 11 | 58 | SCHWARZMANN MichaelTeam NetApp — Endura | 23 | Team NetApp — Endura | ,, 4:08 | 75189 | 75189 | 53 | +53: 57 | 34 | FAIRLY CalebGarmin Sharp | 27 | Garmin Sharp | ,, 4:08 | ||||||||||||
76 | 56 | KOHLER MartinBMC Racing Team | 29 | BMC Racing Team | ,, 4:08 | ||||||||||||||||||||||
77 | 89 | +1: 06: 53 | 68 | 27 | Drapac Professional Cycling | ,, 4:08 | |||||||||||||||||||||
78 | 36 | +31: 33 | 65 | NORRIS LachlanDra pac Professional Cycling | 27 | Drapac Professional Cycling | ,, 4:08 | ||||||||||||||||||||
79 | 43 | +41: 08 | 114 | HANDLEYor JRapha Rapha Condor JLT | ,, 4:08 | ||||||||||||||||||||||
80 | 44 | +42: 28 | 111 | CARTHY HughRapha Condor JLT | 208 , 4:08 | ||||||||||||||||||||||
81 | 67 | +59: 26 | 64 | LAPTHORNE DarrenDrapac Professional Cycling | 31 | Drapac Professional Cycling | |||||||||||||||||||||
82 | 88 | +1: 06: 34 | 62 | CANTWELL JonathanDrapac Professional Cycling | 32 | Drapac Prof эссионал Велоспорт | ,, 4:08 | ||||||||||||||||||||
83 | 77 | +1: 03: 16 | 47 | SALERNO CristianoCannondale | 29 | 29 | 29 | ||||||||||||||||||||
84 | 58 | +55: 38 | 41 | BASSO IvanCannondale | 36 | Cannondale | ,, 4189 9018 | +1: 01: 39 | 66 | PHELAN AdamDrapac Professional Cycling | 23 | Drapac Professional Cycling | ,, 4:08 | ||||||||||||||
86 | 51 | 51 | 103 | CARPENTER Команда разработчиков спортивной одежды RobinHincapie | 22 | Команда разработчиков спортивной одежды Hincapie | ,, 4:08 | ||||||||||||||||||||
87 | 93 | +1: 10: 56 | 48 | ВИВИАНИ ЭлияКаннондейл | 25 | Каннондейл | ,, 4:08 | 155 | ORAM Команда разработчиков JamesBissell | 21 | Группа разработчиков Bissell | ,, 4:08 | |||||||||||||||
89 | 97 | +1: 12: 9018 51 | KÖNIG LeopoldTeam NetApp — Endura | 26 | Team NetApp — Endura | 5:40 5:40 | |||||||||||||||||||||
90 | 75 | OHOR: 01 488 9018 M MatejCannondale | 19 | Cannondale | 6:49 6:49 | ||||||||||||||||||||||
91 | 87 | +1: 06: 32 | 75 | JONES dHealthcare Pro Cycling Team | 35 | UnitedHealthcare Pro Cycling Team | ,, 6:49 | ||||||||||||||||||||
92 | 37 | +32: 29 | 151 | Команда разработчиков Bissell | ,, 6:49 | ||||||||||||||||||||||
93 | 73 | +1: 01: 32 | 156 | SWIRBUL | ,, 6:49 | ||||||||||||||||||||||
94 | 83 | +1: 05: 43 | 143 | CARLSEN KirkJelly Belly p / b Maxxis | 27 | Jelly Belly | 11:06 11:06 | ||||||||||||||||||||
95 | 113 | +1: 32: 13 | 146 | FRETER JohnathanJelly Belly p / b Maxxis 9018 9 | 22 | Jelly Belly p / b Maxxis | ,, 11:06 | ||||||||||||||||||||
96 | 101 | +1: 14: 44 | 67 | SULZBERGER | SULZBERGER Bernard | Drapac Professional Cycling | ,, 11:06 | ||||||||||||||||||||
97 | 80 | +1: 03: 54 | 42 | WURF CameronCannondale | : 50 12:50 | ||||||||||||||||||||||
98 | 92 | +1: 10: 37 | 27 | WATSON CalvinTrek Factory Racing | 21 | Trek Factory Racing | ,, 9000 | ||||||||||||||||||||
99 | 109 | +1: 22: 57 | 44 | KOCH MichelCannondale | 22 | Cannondale | ,, 12:50 9 0005 | ||||||||||||||||||||
100 | 94 | +1: 11: 59 | 83 | HENTTALA JoonasTeam Novo Nordisk | 22 | Команда Ново Нордиск | 920 9000 9050 12:18 | 112 | +1: 31: 59 | 85 | AMBROSE ScottTeam Novo Nordisk | 19 | Team Novo Nordisk | ,, 12:50 | |||||||||||||
102 1:41:14 | 86 | PERRY AaronTeam Novo Nordisk | 26 | Team Novo Nordisk | ,, 12:50 | ||||||||||||||||||||||
103 | 107 | 87 | PLANET CharlesTeam Novo Nordisk | 20 | Team Novo Nordisk | ,, 12:50 | |||||||||||||||||||||
104 | 114 | +1: 37: 15 88189 | VERSCHOOR MartijnTeam Novo Nordisk | 29 | Team Novo Nordisk | ,, 12:50 | |||||||||||||||||||||
105 | 72 | +1: 01188: 17 | K Oscar | 25 | Команда разработчиков спортивной одежды Hincapie | ,, 12:50 | |||||||||||||||||||||
106 | 91 | +1: 09: 48 | 105 | LEWISwear JoeHincapie Sports Team | Команда разработчиков спортивной одежды Hincapie | ,, 12:50 | |||||||||||||||||||||
107 | 84 | +1: 05: 51 | 106 | MAGNER | 106 | MAGNER | Команда разработчиков спортивной одежды | ,, 12:50 | |||||||||||||||||||
108 | 104 | +1: 17: 07 | 107 | SKUJIŅŠ Команда разработчиков спортивной одежды TomsHincapie | 23 | Команда разработчиков спортивной одежды Hincapie | ,, 12:50 | ||||||||||||||||||||
ITH 109 | 49 | 9018 | 21 | Команда разработчиков спортивной одежды Hincapie | ,, 12:50 | ||||||||||||||||||||||
110 | 108 | +1: 20: 21 | 115 | 34 | Rapha Condor JLT | ,, 12:50 | |||||||||||||||||||||
111 | 106 | +1: 18: 26 | 117 | PORTER ElliottLapha | ,, 12:50 | ||||||||||||||||||||||
112 | 102 | +1: 15: 54 | 124 9018 9 | CANDELARIO AlexOptum p / b Kelly Benefit Strategies | 39 | Optum p / b Kelly Benefit Strategies | ,, 12:50 | ||||||||||||||||||||
113 | 110 | 125 | FRIEDMAN MichaelOptum p / b Kelly Benefit Strategies | 31 | Optum p / b Kelly Benefit Strategies | ,, 12:50 | |||||||||||||||||||||
114 | 105: 11 | 132 | LEECE StephenJamis — Hagens Berman | 22 | Jamis — Hagens Berman | ,, 12:50 | |||||||||||||||||||||
115 | 111 | VAN HOOYDONCK NathanBissell Команда разработчиков | 18 | Команда разработчиков Bissell | ,, 12:50 | ||||||||||||||||||||||
DNF | 113 | CUMING MichaelRapha Condor JLT | 23 | Rapha Condor JLT | — | ||||||||||||||||||||||
DNF | 116 | MOSES ThomasRapha Condor 9018 9018 9018 9018 9018 9018 Rapha Condor JLT 9018 9018 9018 DNF | 134 | CRANE IanJamis — Hagens Berman | 24 | Jamis — Hagens Berman | — |
Саган в погоне за первой 1000-й победой в качестве чемпиона мира в Туре 9 в Абу-Дха
Петер Саган впервые выступил на соревнованиях в радужной майке, и он и его команда намерены добиться успеха, а словакиец очень хочет закрепить свою первую победу в качестве чемпиона мира.
Он ездил в тур по Абу-Даби и покажет там цвета. «Я заинтригован этой новой гонкой в Абу-Даби; Велоспорту всегда приятно посещать новые места и заводить новых поклонников », — сказал он перед стартом в четверг.
«Это будет моя первая гонка в майке чемпиона мира, и я сделаю все возможное, чтобы ее почтить».
Саган выиграл золото в Ричмонде с великолепно рассчитанной атакой в финале чемпионата мира. Успех с лихвой компенсировал недовольство соперников в этом сезоне и, как он надеется, стал катализатором, который позволил превратить гораздо больше подиумов в победы.
«Наша цель — выиграть этап с Питером Саганом», — сказал спортивный директор «Тинькофф-Саксо» Тристан Хоффман, поставив перед собой высокие цели.
«Эта гонка завершает сезон 2015 года, и мы входим в нее с надеждой оставить свой след в действии. Здесь будет не только приятно выиграть, но и будет особенным случаем, ведь Питер впервые будет ездить в своей радужной майке ».
Он соглашается с тем, что нет ничего определенного. «Сможем ли мы победить, это другой вопрос — конкуренция тяжелая, и многие гонщики хотят закончить сезон победой», — сказал он.
«Однако у Питера есть первоклассный руководитель в Беннати, и команда мотивирована».
В этом году гонка была добавлена в календарь, и в ней примут участие несколько лучших гонщиков и сильные команды. Они также будут надеяться завершить сезон на высоких и столь агрессивных гонках.
За Саганом будут наблюдать не в последнюю очередь из-за его новой майки, но он также находится в превосходной форме.
Хоффман оценил маршрут и объяснил основные моменты.
«Первый, второй и четвертый этапы в основном плоские, а третий этап заканчивается крутым подъемом.На ровных участках нужно быть в курсе бокового ветра, так как в пустыне много километров с открытой местностью.
«Если есть ветер, ровные участки могут стать очень твердыми. Мы должны быть в первых рядах, но мы увидим, каким будет наш точный подход в зависимости от того, как будут развиваться этапы ».
1 | Адам Блайт (Aqua Blue Sport) | ||
2 | Марк Кристиан (Aqua Blue Sport) | ||
3 | Эндрю Фенн (Aqua Blue Sport) | ||
4 | Дэниел Пирсон (Aqua Blue Sport) | ||
5 | Ангус Клэкстон (100% ME) | ||
6 | Адам Хартли (100% ME) | ||
7 (100% ME) | |||
8 | Reece Wood (100% ME) | ||
9 | Марк Стюарт (Пост — ChainReaction) | ||
10 | Александр Брейбрук (AVC Aix-En ) | ||
11 | Christopher Lawless (Axeon Hagens Berman CT) | ||
12 | Nic McKibbin (Bath Cycling Club) | ||
13 | Dexter Gardia s (BIKE Channel Canyon) | ||
14 | Sam Lowe (BIKE Channel Canyon) | ||
15 | Роберт Партридж (BIKE Channel Canyon) | ||
16 | Alexandar Richards9 (Alexandar BIKE | Channel 18) | |
17 | Макс Стедман (BIKE Channel Canyon) | ||
18 | Harry Tanfield (BIKE Channel Canyon) | ||
19 | Jake Womersley (BIKE Channel Canyon) 9289 | Лоупен | Catford CC Equipe / Banks) |
21 | Lloyd Chapman (Catford CC Equipe / Banks) | ||
22 | Matthew Clements (Catford CC Equipe / Banks) | ||
23 | |||
24 | Callum Ferguson (Catford CC Equipe / Banks) | ||
25 | George Fowler (Catford CC Equip e / Banks) | ||
26 | Will Fox (Catford CC Equipe / Banks) | ||
27 | Джошуа Хаас (Catford CC Equipe / Banks) | ||
28 | James Equipe / Catford CC Бэнкс) | ||
29 | Майк Рэгг (CC Luton) | ||
30 | Деклан Хадсон (Clay Cross Road Team) | ||
31 | Оливер Джонс (Cycle Team OnForm) | Бен Хетерингтон (Cyclesport. se — Memil Pro Cycling) | |
33 | Лиам Бромили (Велоспорт Шеффилд Гигант Шеффилд) | ||
34 | Николас Купер (DFL In-Gear Development) | ||
35/ | |||
36 | Джейми Флетчер (Ellan Vannin CC / Appleby) | ||
37 | Karl Baillie (Giant Store Rutland / Wattbike) | ||
ren 38 9018 CC) | |||
39 | Louis Modell (Hennebont Cyclisme) | ||
40 | Джеймс Маклафлин (Hrinkow Advarics Cycleang) | ||
41 | Леон- | Ян Бибби (JLT Condor) | |
43 | Эдмунд Брэдбери (JLT Condor) | ||
44 | Грэм Бриггс (JLT Con dor) | ||
45 | Рассел Даунинг (JLT Condor) | ||
46 | Мэтью Гибсон (JLT Condor) | ||
47 | Джеймс Галлен 8 9018 9018 9018 9018 Steve JLT Кондор (JLT Condor) | ||
49 | Эдвард Лаверак (JLT Condor) | ||
50 | Томас Мозес (JLT Condor) | ||
51 | |||
53 | Кинси Макилкуэм (KTM Impsport RT) | ||
54 | Крис Фэллон (Kuota — Spinergy — GSG) | ||
Leaderman (Leopard | |||
) 55 | |||
56 | Эндрю Брюс (Leslie Bike Shop / Bikers Boutique) | ||
57 | Джеймс Шоу (Lotto Soudal) | ||
58 | Мэтт Кроншоу (Мэдисон Генезис) | ||
59 | Джо Эванс (Мэдисон Генезис) | ||
60 | Ричард Хэндли (Мэдисон Генезис) | ||
61 | Мэдисон Генезис | Мэдисон Генезис | |
62 | Тобин Хортон (Мэдисон Генезис) | ||
63 | Грифад Льюис (Мэдисон Генезис) | ||
64 | Джонатан МакЭвой Алекс (Мэдисон Генезис 9 | Мэдисон Генезис 9 | |
66 | Эрик Роусел (Мэдисон Генезис) | ||
67 | Коннор Свифт (Мэдисон Генезис) | ||
68 | Энди Браун (Metaltek Kuota Racing Team8 | ||
70 | Дэн Флиман (Metaltek Kuota Racing Team) | ||
71 | Лиам Холохан (Metaltek Kuota Racing Team) | ||
72 | Стивен Лоули (Metaltek Kuota Racing Team) | ||
73 | Рис Ллойд (Metaltek Kuota Racing Team) | ||
75 | Том Маззоне (Metaltek Kuota Racing Team) | ||
76 | Берти Ньюи (Metaltek Kuota Racing Team) | ||
77 | Джордж Пима (Джордж Пота) ) | ||
78 | Алекс Даусет (Movistar Team) | ||
79 | Майкл Куминг (Neon-Velo Cycling Team) | ||
80 | Elliott Porter (Neon- | Томас Бейлис (One Pro Cycling) | |
82 | Уильям Харпер (One Pro Cycling) | ||
83 | Георг e Harper (One Pro Cycling) | ||
84 | Kristian House (One Pro Cycling) | ||
85 | Джошуа Хант (One Pro Cycling) | ||
86 | Thomas Stewart | ||
87 | Сэмюэл Уильямс (One Pro Cycling) | ||
88 | Питер Уильямс (One Pro Cycling) | ||
89 | Джек Стивенсон (вне седла) | ||
Джонс (Polartec Fundacion Contador) | |||
91 | Бен Джоугин (Pro Vision Race Team) | ||
92 | Джон Арчибальд (Pro Vision Scotland) | ||
93 | |||
94 | Грант Мартин (Raleigh GAC) | ||
95 | Fraser Martin (Raleigh GAC) | ||
96 | Ryan Perry (Rale igh GAC) | ||
97 | Тристан Роббинс (Raleigh GAC) | ||
98 | Киран Брэди (Richardsons-Trek RT) | ||
99 | Oliverons 18 Maxwell | Джез Макканн (Richardsons-Trek RT) | |
101 | Joshua Outram (Richardsons-Trek RT) | ||
102 | Люк Райан (Richardsons-Trek RT) | Джордж Вуд 9 | Джордж Вуд (Richardsons-Trek RT) |
104 | Габриэль Каллэй (SEG Racing Academy) | ||
105 | Стивен Уильямс (SEG Racing Academy) | ||
106 | Spirit Burnost | ||
107 | Эдвард Клеменс (Spirit Tifosi Racing Team) | ||
108 | Дуглас Коулман (Spirit Tifosi Racing Team) | ||
Кристофер Дредж (Spirit Tifosi Racing Team) | |||
110 | Стэнли Кеннетт (Spirit Tifosi Racing Team) | ||
111 | Энтони Мойе (Spirit Tifosi Racing Team) | 112 Passfield (Spirit Tifosi Racing Team) | |
113 | Патрик Кларк (Team B38 / Underpin Racing) | ||
114 | Archie Cross (Team B38 / Underpin Racing) | ||
115 | Team Kieran B38 / Underpin Racing) | ||
116 | Марк Кавендиш (данные о командном измерении) | ||
117 | Скотт Туэйтс (данные о командном измерении) | ||
118 | Алекс Оти (команда 9018TM) | Питер Барушевичус (Команда КТМ) | |
120 | Юджин Кросс (Команда КТМ) | ||
121 | |||
122 | Адам Робинсон (Team KTM) | ||
123 | Fraser Rounds (Team KTM) | ||
124 | Джулиан Варлей (Team 9018TM) | Сэм Брэнд (команда разработчиков Novo Nordisk) | |
126 | Джонатан Диббен (Team Sky) | ||
127 | Owain Doull (Team Sky) | ||
128 | Tao ) | ||
129 | Питер Кенно (Team Sky) | ||
130 | Люк Роу (Team Sky) | ||
131 | Ян Стэннард (Team Sky) | ||
Команда Уиггинса) | |||
133 | Эшли Деннис (Команда Уиггинса) | ||
134 | Натан Дрейпер (Команда Уиггинс) | ||
135 | Sa Мюэль Харрисон (Команда Уиггинса) | ||
136 | Рис Хауэллс (Команда Уиггинса) | ||
137 | Дилан Керфут-Робсон (Команда Уиггинс) | ||
138 К2018 | 139 | Christopher Latham (Team Wiggins) | |
140 | Robert Scott (Team Wiggins) | ||
141 | Andrew Tennant (Team Wiggins) | ||
148 | |||
143 | Джои Уокер (команда Уиггинс) | ||
144 | Оливер Вуд (команда Уиггинс) | ||
145 | Бен Свифт (команда | ||
147 | Брэдли Стоукс (Velo Schils — Interbike RT) | ||
148 | Джеймс Уилкинсон (Vetrapo Cyc ling Team) | ||
149 | Ryan Coulton (Колесная база Altura MGD) | ||
150 | Джоэл Льюис (Колесная база Altura MGD) | ||
151 | MGD | Leviase 9018 9018 Leviase Moody 152 | Alfie Moses (Wheelbase Altura MGD) |
153 | Evan Oliphant (Wheelbase Altura MGD) | ||
154 | Scott Auld (Zappi Racing Team) | ||
156 | Пол Дабл (Zappi Racing Team) | ||
157 | Оуэн Дадли (Zappi Racing Team) | ||
158 | Бен Харди (Zappi Racing Team) 15189 9018 9189 | ||
160 | Fraser Turgoose |
Британский Марк МакНалли увеличивает лидерство в KoM, играя за Zardini t. одерживает сольную победу на The Tumble
Британец Марк МакНалли продемонстрировал еще одно боевое выступление, чтобы укрепить свое лидерство в соревнованиях Skoda King of the Mountain: Эдуардо Зардини из Bardiani Valvole стал лидером гонки Friends Life Tour of Britain после решительной сольной победы на финише на вершине Tumble.
МакНелли получил перерыв и, стабильно набирая очки на трех промежуточных подъемах, продолжил боевые действия, которые он видел до сих пор в каждом отрыве.
Сэр Брэдли Виггинс из Team Sky ограничил свои потери на крутом финише за пределами Абергавенни, чтобы опередить лидера в генеральной классификации в пределах 24 секунд.
На третьем этапе гонщики встретились в 179,9 км от Ньютауна на реке Северн и завершились финалом на вершине горы на The Tumble недалеко от Абергавенни.Между ними лежали три категорированных подъема на Долфор, Найтон и Нищий Буш, а также точки спринта Йодль в Лисвене, Абергавенни и Монмуте.
В дневном отрыве участвовали четыре британских гонщика, Майк Каминг (Rapha Condor JLT), Том Стюарт (Madison Genesis), победитель серии Elite Road Янто Баркер (Team Raleigh) и участник гонки Марк МакНалли (An Post Chain Reaction). ) к ним присоединились профессионалы континентальной Европы Себастьян Ландер (BMC Racing) и Мануэле Боаро (Тинькофф Саксо).
МакНелли был в гуще событий с первого этапа, в каждом перерыве гонки до сих пор и закончил день лидером конкурса Skoda King of the Mountains, заняв три вторых места на подъемах Долфор, Найтон. и куст нищего.
Отрыв группы побега увеличился до двух с половиной минут, после чего отрыв начал падать — оставалось около 90 километров.
Но временное затишье привело к тому, что свинцовый воск и убыль, прежде чем пелотон начал нажимать на педаль акселератора и начал неизбежный улов, поскольку потенциально решающий для гонки подъем The Tumble вырисовывался, греясь в лучах позднего летнего солнца.
Боаро и Лендер разделили трофеи в спринтерских соревнованиях Йодель, Боаро сделал первый галоп в Лисвене, а Ландер выиграл в Абергавенни и Монмуте.
После непродолжительной попытки Боаро и Лендера сбежать, Куминг контратаковал в одиночку, но вскоре к нему присоединились всадник Тинькофф Саксо и Стюарт, и, оставив меньше 40 километров, у троицы было две минуты и десять секунд на пелотоне. .
Чувствуя опасность, команды претендентов на генеральную классификацию начали выходить вперед и преследовать, Марк Кавендиш сменил спринт на обязанности рулера, работая на своего главного соперника Михала Квятовски, а Team Sky скопила позади сэра Брэдли Виггинса.
Вскоре лидерство упало, оставив меньше минуты на 25 километрах, и когда британский дуэт Стюарта и Куминга начал колебаться, Буро ушел в одиночку, проехав всего 13 километров, прежде чем гонка достигла основания The Tumble.
С остатками дневного перерыва, оставшимися до конца 12 километров, Буро продолжал идти один, но был пойман за шесть километров, и битва при Кувырке началась.
Британский Tao Geoghegan-Hart был доставлен к подножию подъема, но вскоре его затопили райдеры Tinkoff Saxo и Omega Pharma-Quick Step, которые выехали на крутые склоны у подножия подъема.
К атаке Джека Бауэра из Garmin Sharp присоединился Зардини (Бардиани Валволе), двое идущих чисто по крутым склонам под деревьями.
Но за три километра до конца Бауэр сел, оставив Зардини идти в одиночку с 15-секундным преимуществом на поле. Николас Рош (Тинькофф Саксо) вышел на лидирующую позицию, а пелотон оказался позади.
Роше попытался сбросить Зардини, но итальянец вернулся за руль Роша, прежде чем атаковать с приближением огненных румян, всадник Бардиани соло прочь, чтобы одержать прекрасную победу, а вместе с ней и майку лидера Friends Life.
Сэр Брэдли Виггинс, который был исключен из группы преследования, помог выйти на финишную прямую товарищ по команде Дэвид Лопес, финишировавший пятым и сохранивший контакт в генеральной классификации.
После этапа Бен Свифт, занявший второе место в Лландидно и лидер по набранным очкам, прокомментировал выступление Team Sky и их перспективы на оставшуюся часть гонки.
«Мы хотели сохранить Брэдли в споре и ограничить наши потери, — сказал Свифт, обращаясь к Team Sky. — Мы все вместе хорошо ехали.В «Кувырке» произошла небольшая суматоха, и мы немного потеряли друг друга, но Брэдли проделал отличную работу.
«Это будет сложно, но после ферзевого этапа здесь следует вернуться к более регулярному формату, когда команда в желтой майке контролирует гонку. Omega Pharma — Quick-Step сегодня отлично поработала. Мы просто будем держаться как единое целое ».
Четвертый этап в среду проходит 184,6 км от Вустера до Бристоля. Следите за обновлениями всех этапов Тура Британии на веб-сайте British Cycling.
Результаты
Третий этап
Генеральная классификация после третьего этапа
.